DockerERTFF/lib/formatters/date.js

83 lines
3.0 KiB
JavaScript

const { padNumber, parseDate, formatDate } = require('../core/util');
module.exports = {
formatDate: function(date, format, utc) {
date = parseDate(date);
if (date == null) return date;
return formatDate(date, format, utc);
},
dateAdd: function(date, interval, num) {
date = parseDate(date);
if (date == null) return date;
switch (interval) {
case 'years': date.setFullYear(date.getFullYear() + num); break;
case 'months': date.setMonth(date.getMonth() + num); break;
case 'weeks': date.setDate(date.getDate() + (num * 7)); break;
case 'days': date.setDate(date.getDate() + num); break;
case 'hours': date.setHours(date.getHours() + num); break;
case 'minutes': date.setMinutes(date.getMinutes() + num); break;
case 'seconds': date.setSeconds(date.getSeconds() + num); break;
}
return date.toISOString();
},
dateDiff: function(date, interval, date2) {
date = parseDate(date);
date2 = parseDate(date2);
let diff = Math.abs(date2 - date);
if (isNaN(diff) || date == null || date2 == null) return undefined;
let s = 1000, m = s * 60, h = m * 60, d = h * 24, w = d * 7;
switch (interval) {
case 'years': return Math.abs(date2.getFullYear() - date.getFullYear());
case 'months': return Math.abs((date2.getFullYear() * 12 + date2.getMonth()) - (date.getFullYear() * 12 + date.getMonth()));
case 'weeks': return Math.floor(diff / w);
case 'days': return Math.floor(diff / d);
case 'hours': return Math.floor(diff/ h);
case 'minutes': return Math.floor(diff / m);
case 'seconds': return Math.floor(diff / s);
case 'hours:minutes':
h = Math.floor(diff / h);
m = Math.floor(diff / m);
return padNumber(h, 2) + ':' + padNumber(m - (h * 60), 2);
case 'minutes:seconds':
m = Math.floor(diff / m);
s = Math.floor(diff / s);
return padNumber(m, 2) + ':' + padNumber(s - (m * 60), 2);
case 'hours:minutes:seconds':
h = Math.floor(diff / h);
m = Math.floor(diff / m);
s = Math.floor(diff / s);
return padNumber(h, 2) + ':' + padNumber(m - (h * 60), 2) + ':' + padNumber(s - m * 60, 2);
}
return undefined;
},
toTimestamp: function(date) {
date = parseDate(date);
if (date == null) return date;
return Math.floor(date.getTime() / 1000);
},
toLocalTime: function(date) {
date = parseDate(date);
if (date == null) return date;
return formatDate(date, 'yyyy-MM-dd HH:mm:ss.v');
},
toUTCTime: function(date) {
date = parseDate(date);
if (date == null) return date;
return date.toISOString();
},
};