UNPKG

chrono-node

Version:

A natural language date parser in Javascript

119 lines 4.09 kB
export function addDuration(ref, duration) { let date = new Date(ref); if (duration["y"]) { duration["year"] = duration["y"]; delete duration["y"]; } if (duration["mo"]) { duration["month"] = duration["mo"]; delete duration["mo"]; } if (duration["M"]) { duration["month"] = duration["M"]; delete duration["M"]; } if (duration["w"]) { duration["week"] = duration["w"]; delete duration["w"]; } if (duration["d"]) { duration["day"] = duration["d"]; delete duration["d"]; } if (duration["h"]) { duration["hour"] = duration["h"]; delete duration["h"]; } if (duration["m"]) { duration["minute"] = duration["m"]; delete duration["m"]; } if (duration["s"]) { duration["second"] = duration["s"]; delete duration["s"]; } if (duration["ms"]) { duration["millisecond"] = duration["ms"]; delete duration["ms"]; } if ("year" in duration) { const floor = Math.floor(duration["year"]); date.setFullYear(date.getFullYear() + floor); const remainingFraction = duration["year"] - floor; if (remainingFraction > 0) { duration.month = duration?.month ?? 0; duration.month += remainingFraction * 12; } } if ("quarter" in duration) { const floor = Math.floor(duration["quarter"]); date.setMonth(date.getMonth() + floor * 3); } if ("month" in duration) { const floor = Math.floor(duration["month"]); date.setMonth(date.getMonth() + floor); const remainingFraction = duration["month"] - floor; if (remainingFraction > 0) { duration.week = duration?.week ?? 0; duration.week += remainingFraction * 4; } } if ("week" in duration) { const floor = Math.floor(duration["week"]); date.setDate(date.getDate() + floor * 7); const remainingFraction = duration["week"] - floor; if (remainingFraction > 0) { duration.day = duration?.day ?? 0; duration.day += Math.round(remainingFraction * 7); } } if ("day" in duration) { const floor = Math.floor(duration["day"]); date.setDate(date.getDate() + floor); const remainingFraction = duration["day"] - floor; if (remainingFraction > 0) { duration.hour = duration?.hour ?? 0; duration.hour += Math.round(remainingFraction * 24); } } if ("hour" in duration) { const floor = Math.floor(duration["hour"]); date.setHours(date.getHours() + floor); const remainingFraction = duration["hour"] - floor; if (remainingFraction > 0) { duration.minute = duration?.minute ?? 0; duration.minute += Math.round(remainingFraction * 60); } } if ("minute" in duration) { const floor = Math.floor(duration["minute"]); date.setMinutes(date.getMinutes() + floor); const remainingFraction = duration["minute"] - floor; if (remainingFraction > 0) { duration.second = duration?.second ?? 0; duration.second += Math.round(remainingFraction * 60); } } if ("second" in duration) { const floor = Math.floor(duration["second"]); date.setSeconds(date.getSeconds() + floor); const remainingFraction = duration["second"] - floor; if (remainingFraction > 0) { duration.millisecond = duration?.millisecond ?? 0; duration.millisecond += Math.round(remainingFraction * 1000); } } if ("millisecond" in duration) { const floor = Math.floor(duration["millisecond"]); date.setMilliseconds(date.getMilliseconds() + floor); } return date; } export function reverseDuration(duration) { const reversed = {}; for (const key in duration) { reversed[key] = -duration[key]; } return reversed; } //# sourceMappingURL=duration.js.map