You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.6 KiB
71 lines
1.6 KiB
2 years ago
|
"use strict";
|
||
|
|
||
|
var moment = require('moment');
|
||
|
|
||
|
var dateToModel = exports.dateToModel = (function () {
|
||
|
var precisions = ['year', 'month', 'day'];
|
||
|
|
||
|
return function (d) {
|
||
|
d = d.replace(/-/g, '');
|
||
|
var m = moment.utc(d, 'YYYYMMDD');
|
||
|
var dl = d.length;
|
||
|
dl = (dl > 8) ? 8 : dl;
|
||
|
var precisionIndex = dl / 2 - 2;
|
||
|
var precision = precisions[precisionIndex];
|
||
|
if (m.isValid() && precision) {
|
||
|
return {
|
||
|
date: m.toISOString(),
|
||
|
precision: precision
|
||
|
};
|
||
|
} else {
|
||
|
return null;
|
||
|
}
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
exports.dateTimeToModel = function (d) {
|
||
|
if (d.indexOf('T') > 0) {
|
||
|
return {
|
||
|
date: d,
|
||
|
precision: 'second'
|
||
|
};
|
||
|
} else {
|
||
|
return dateToModel(d);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var modelToDateTime = exports.modelToDateTime = (function () {
|
||
|
var precisionBasedFormatter = {
|
||
|
year: function (t) {
|
||
|
return moment(t, 'YYYY').format('YYYY');
|
||
|
},
|
||
|
month: function (t) {
|
||
|
return moment(t, 'YYYYMM').format('YYYY-MM');
|
||
|
},
|
||
|
day: function (t) {
|
||
|
return moment(t, 'YYYYMMDD').format('YYYY-MM-DD');
|
||
|
}
|
||
|
};
|
||
|
|
||
|
return function (dt) {
|
||
|
var f = precisionBasedFormatter[dt.precision];
|
||
|
if (f) {
|
||
|
return f(dt.date);
|
||
|
} else {
|
||
|
return dt.date;
|
||
|
}
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
exports.modelToDate = function (dt) {
|
||
|
var validPrecisions = {
|
||
|
'day': true,
|
||
|
'month': true,
|
||
|
'year': true
|
||
|
};
|
||
|
if (!validPrecisions[dt.precision]) {
|
||
|
dt.precision = 'day';
|
||
|
}
|
||
|
return modelToDateTime(dt);
|
||
|
};
|