mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-09-18 14:59:53 +02:00
Rework 'parseDuration' as a pure duration parsing
This commit is contained in:
@@ -231,37 +231,30 @@ const getStartDate = function (prevTime, dateFormat, str) {
|
||||
};
|
||||
|
||||
/**
|
||||
* Parse a duration as an absolute date.
|
||||
* Parse a string as a moment duration.
|
||||
*
|
||||
* @param durationStr A string representing a duration
|
||||
* @param relativeTime The moment when this duration starts
|
||||
* @returns The date of the end of the duration.
|
||||
* The string have to be compound by a value and a shorthand duration unit. For example `5d`
|
||||
* representes 5 days.
|
||||
*
|
||||
* Shorthand unit supported are:
|
||||
*
|
||||
* - `y` for years
|
||||
* - `M` for months
|
||||
* - `w` for weeks
|
||||
* - `d` for days
|
||||
* - `h` for hours
|
||||
* - `s` for seconds
|
||||
* - `ms` for milliseconds
|
||||
*
|
||||
* @param {string} str - A string representing the duration.
|
||||
* @returns {moment.Duration} A moment duration, including an invalid moment for invalid input string.
|
||||
*/
|
||||
const parseDuration = function (durationStr, relativeTime) {
|
||||
const durationStatement = /^(\d+(?:\.\d+)?)([wdhms]|ms)$/.exec(durationStr.trim());
|
||||
if (durationStatement !== null) {
|
||||
switch (durationStatement[2]) {
|
||||
case 'ms':
|
||||
relativeTime.add(durationStatement[1], 'milliseconds');
|
||||
break;
|
||||
case 's':
|
||||
relativeTime.add(durationStatement[1], 'seconds');
|
||||
break;
|
||||
case 'm':
|
||||
relativeTime.add(durationStatement[1], 'minutes');
|
||||
break;
|
||||
case 'h':
|
||||
relativeTime.add(durationStatement[1], 'hours');
|
||||
break;
|
||||
case 'd':
|
||||
relativeTime.add(durationStatement[1], 'days');
|
||||
break;
|
||||
case 'w':
|
||||
relativeTime.add(durationStatement[1], 'weeks');
|
||||
break;
|
||||
}
|
||||
const parseDuration = function (str) {
|
||||
const statement = /^(\d+(?:\.\d+)?)([yMwdhms]|ms)$/.exec(str.trim());
|
||||
if (statement !== null) {
|
||||
return moment.duration(Number.parseFloat(statement[1]), statement[2]);
|
||||
}
|
||||
return relativeTime.toDate();
|
||||
return moment.duration.invalid();
|
||||
};
|
||||
|
||||
const getEndDate = function (prevTime, dateFormat, str, inclusive) {
|
||||
@@ -277,7 +270,12 @@ const getEndDate = function (prevTime, dateFormat, str, inclusive) {
|
||||
return mDate.toDate();
|
||||
}
|
||||
|
||||
return parseDuration(str, moment(prevTime));
|
||||
const endTime = moment(prevTime);
|
||||
const duration = parseDuration(str);
|
||||
if (duration.isValid()) {
|
||||
endTime.add(duration);
|
||||
}
|
||||
return endTime.toDate();
|
||||
};
|
||||
|
||||
let taskCnt = 0;
|
||||
|
Reference in New Issue
Block a user