UNPKG

immutable-date-lib

Version:
256 lines (255 loc) 8.79 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.dateToString = exports.toArray = exports.parseDate = exports.dateEqual = exports.timeEqual = exports.getDatePart = exports.getToday = exports.setMilliseconds = exports.addMilliseconds = exports.setDate = exports.addDays = exports.setMonths = exports.addMonths = exports.setFullYear = exports.addYears = exports.setHours = exports.addHours = exports.setMinutes = exports.addMinutes = exports.setSeconds = exports.addSeconds = exports.immutableDate = exports.getTimeSpan = void 0; Date.prototype.chainSetFullYear = function (val) { return setFullYear(this, val); }; Date.prototype.chainSetMonth = function (val) { return setMonths(this, val); }; Date.prototype.chainSetDate = function (val) { return setDate(this, val); }; Date.prototype.chainSetHours = function (val) { return setHours(this, val); }; Date.prototype.chainSetMinutes = function (val) { return setMinutes(this, val); }; Date.prototype.chainSetSeconds = function (val) { return setSeconds(this, val); }; Date.prototype.chainSetMilliseconds = function (val) { return setMilliseconds(this, val); }; Date.prototype.addDays = function (val) { return addDays(this, val); }; Date.prototype.addYears = function (val) { return addYears(this, val); }; Date.prototype.addMonths = function (val) { return addMonths(this, val); }; Date.prototype.addHours = function (val) { return addHours(this, val); }; Date.prototype.addMinutes = function (val) { return addMinutes(this, val); }; Date.prototype.addSeconds = function (val) { return addSeconds(this, val); }; Date.prototype.dateToString = function (format) { return dateToString(this, format); }; Date.prototype.getTimeSpan = function (d) { return getTimeSpan(this, d); }; Date.prototype.getDatePart = function () { return getDatePart(this); }; Date.prototype.dateEqual = function (val, dateFormat = undefined) { return dateEqual(this, val, undefined, dateFormat); }; Date.prototype.timeEqual = function (val) { return timeEqual(this, val); }; Date.prototype.toArray = function () { return toArray(this); }; function getTimeSpan(date1, date2) { let [d1, d2] = [new Date(date1), new Date(date2)]; if (d1 > d2) { [d1, d2] = [d2, d1]; } const ms = d2.getTime() - d1.getTime(); const totalSeconds = ms / 1000; let totalMinutes = totalSeconds / 60; const totalHours = totalMinutes / 60; const totalDays = totalHours / 24; let years = d2.getFullYear() - d1.getFullYear(); if (d1.addYears(years) > d2) { years--; } let totalMonths = years * 12 + d2.getMonth() - d1.getMonth(); if (d1.addMonths(totalMonths) > d2) { totalMonths--; } const result = { years, totalMonths, totalDays, totalHours, totalMinutes, totalSeconds }; return result; } exports.getTimeSpan = getTimeSpan; function immutableDate(d = '') { return d ? new Date(d) : new Date(); } exports.immutableDate = immutableDate; function addSeconds(d, val) { const myDate = new Date(d); myDate.setSeconds(myDate.getSeconds() + val); return myDate; } exports.addSeconds = addSeconds; function setSeconds(d, val) { const date = new Date(d); date.setSeconds(val); return date; } exports.setSeconds = setSeconds; function addMinutes(d, val) { const myDate = new Date(d); myDate.setMinutes(myDate.getMinutes() + val); return myDate; } exports.addMinutes = addMinutes; function setMinutes(d, val) { const myDate = new Date(d); myDate.setMinutes(val); return myDate; } exports.setMinutes = setMinutes; function addHours(d, val) { const myDate = new Date(d); myDate.setHours(myDate.getHours() + val); return myDate; } exports.addHours = addHours; function setHours(d, val) { const myDate = new Date(d); myDate.setHours(val); return myDate; } exports.setHours = setHours; function addYears(d, val) { const myDate = new Date(d); myDate.setFullYear(myDate.getFullYear() + val); return myDate; } exports.addYears = addYears; function setFullYear(d, val) { const myDate = new Date(d); myDate.setFullYear(val); return myDate; } exports.setFullYear = setFullYear; function addMonths(d, val) { const myDate = new Date(d); myDate.setMonth(myDate.getMonth() + val); return myDate; } exports.addMonths = addMonths; function setMonths(d, val) { console.log(d); console.log(val); const myDate = new Date(d); myDate.setMonth(val); return myDate; } exports.setMonths = setMonths; function addDays(d, val) { const myDate = new Date(d); myDate.setDate(myDate.getDate() + val); return myDate; } exports.addDays = addDays; function setDate(d, val) { const myDate = new Date(d); myDate.setDate(val); return myDate; } exports.setDate = setDate; function addMilliseconds(d, val) { const myDate = new Date(d); myDate.setMilliseconds(myDate.getMilliseconds() + val); return myDate; } exports.addMilliseconds = addMilliseconds; function setMilliseconds(d, val) { const myDate = new Date(d); myDate.setMilliseconds(val); return myDate; } exports.setMilliseconds = setMilliseconds; function getToday() { return getDatePart(new Date()); } exports.getToday = getToday; function getDatePart(d) { const myDate = new Date(d); return new Date(myDate.toLocaleDateString()); } exports.getDatePart = getDatePart; function timeEqual(d1, d2) { return new Date(d1).getTime() == new Date(d2).getTime(); } exports.timeEqual = timeEqual; function dateEqual(d1, d2, d1format = undefined, d2format = undefined) { let date1 = d1format ? parseDate(d1, d1format) : new Date(d1); let date2 = d2format ? parseDate(d2, d2format) : new Date(d2); return date1.toLocaleDateString() === date2.toLocaleDateString(); } exports.dateEqual = dateEqual; function parseDate(s, format, isUtc = false) { if (!s) { throw Error('Invalid Date'); } const arr = ['yyyy', 'MM', 'dd', 'hh', 'mm', 'ss']; const indexArr = arr.map((x, i) => ({ key: arr[i], index: format.indexOf(x), val: 0 })); const sorted = indexArr .filter(x => x.index > -1) .sort((x, y) => x.index < y.index ? -1 : x.index === y.index ? 0 : 1); let start = sorted[0].index; for (const k of sorted) { const result = parseNumber(s, start, k.key.length); k.val = result.val; start = result.i; } const [year, month, date, hour, minute, second] = [indexArr[0].val, indexArr[1].val - 1, indexArr[2].val, indexArr[3].val, indexArr[4].val, indexArr[5].val]; return isUtc ? new Date(`${year}-${myToString(month, 2)}-${myToString(date, 2)}T${myToString(hour, 2)}:${myToString(minute, 2)}:${myToString(second, 2)}Z`) : new Date(year, month, date, hour, minute, second); } exports.parseDate = parseDate; function toArray(d) { const myDate = new Date(d); return [myDate.getFullYear(), myDate.getMonth() + 1, myDate.getDate(), myDate.getHours(), myDate.getMinutes(), myDate.getSeconds(), myDate.getMilliseconds()]; } exports.toArray = toArray; function dateToString(d, format = 'yyyy-MM-dd hh:mm:ss') { const myDate = new Date(d); const [year, month, date, hour, minute, second] = toArray(myDate); let halfHour = hour % 12; halfHour = halfHour === 0 ? 12 : halfHour; const result = format .replace('yyyy', year.toString()) .replace('MMM', myDate.toLocaleString('default', { month: 'long' })) .replace('MM', myToString(month, 2)) .replace('ddd', myDate.toLocaleString('default', { weekday: 'long' })) .replace('dd', myToString(date, 2)) .replace('HH', myToString(hour, 2)) .replace('hh', myToString(halfHour, 2)) .replace('h', halfHour.toString()) .replace('mm', myToString(minute, 2)) .replace('ss', myToString(second, 2)) .replace('tt', myDate.getHours() >= 12 ? 'pm' : 'am'); return result; } exports.dateToString = dateToString; function myToString(n, length) { let leadNumber = 1; for (let i = 0; i < length; i++) { leadNumber *= 10; } return (leadNumber + n).toString().substr(1); } function isNumber(c) { return '0123456789'.indexOf(c) > -1; } function parseNumber(s, start, length) { let i = start; for (; i < start + length && isNumber(s[i]); i++) { } const val = +s.substr(start, i - start); for (; i < s.length && !isNumber(s[i]); i++) { } return { val, i }; }