我正在尝试使用以下代码计算 Javascript 中两个日期之间的天数。
console.log(self.StartDate());
var start = moment(self.StartDate(), "YYYY-MM-DD");
console.log(start);
console.log(self.EndDate());
var end = moment(self.EndDate(), "YYYY-MM-DD");
console.log(end);
var duration = moment.duration(start.diff(end));
console.log(duration);
//no of days between start and end
console.log(duration.asDays());
控制台输出:
Thu Jun 20 2019 01:00:00 GMT+0100 (British Summer Time)
n {_isAMomentObject: true, _i: Thu Jun 20 2019 01:00:00 GMT+0100 (British Summer Time), _f: "YYYY-MM-DD", _isUTC: false, _pf: {…}, …}_d: Wed Aug 19 0020 00:00:00 GMT-0001 (British Summer Time) {}_f: "YYYY-MM-DD"_i: Thu Jun 20 2019 01:00:00 GMT+0100 (British Summer Time) {}_isAMomentObject: true_isUTC: false_locale: r {_ordinalParse: /\d{1,2}(th|st|nd|rd)/, ordinal: ƒ, _abbr: "en", _ordinalParseLenient: /\d{1,2}(th|st|nd|rd)|\d{1,2}/}_pf: {empty: false, unusedTokens: Array(0), unusedInput: Array(3), overflow: 1, charsLeftOver: 49, …}__proto__: Object
Mon Jun 24 2019 15:10:41 GMT+0100 (British Summer Time)
n {_isAMomentObject: true, _i: Mon Jun 24 2019 15:10:41 GMT+0100 (British Summer Time), _f: "YYYY-MM-DD", _isUTC: false, _pf: {…}, …}
Ea {_milliseconds: -126230400000, _days: 0, _months: 0, _data: {…}, _locale: r}
-1461
self.StartDate() 是 20/06/2019,self.EndDate() 是 24/06/2019,所以我很高兴警报显示 4,但它显示 -1461。
为什么会这样?
最佳答案
问题是您的日期不是 formatted the way you tell moment.js they are 。 20/06/2019
是 DD/MM/YYYY
,而不是 YYYY-MM-DD
。根据文档,非数字字符将被忽略,因此 20/06/2019
将被解析为 2006-20-19
。由于这样的日期不存在,Moment.js 会尝试猜测您的实际含义,并得出 2020-06-19
:
var start = moment("20/06/2019", "YYYY-MM-DD");
console.log(start);
<script src="https://cdn.jsdelivr.net/momentjs/2.14.1/moment-with-locales.min.js"></script>
结束日期也会发生同样的情况。
您需要更改告诉 Moment.js 的格式,或者修复开始和结束日期以使用您指定的格式,在这两种情况下,您都会得到正确的结果:
var self = {
StartDate: () => "20/06/2019",
EndDate: () => "24/06/2019"
}
var start = moment(self.StartDate(), "DD/MM/YYYY"); //using the correct format
var end = moment(self.EndDate(), "DD/MM/YYYY");
var duration = moment.duration(start.diff(end));
console.log(duration.asDays());
<script src="https://cdn.jsdelivr.net/momentjs/2.14.1/moment-with-locales.min.js"></script>
var self = {
StartDate: () => "2019-06-20", //using dates in the correct format
EndDate: () => "2019-06-24"
}
var start = moment(self.StartDate(), "YYYY-MM-DD");
var end = moment(self.EndDate(), "YYYY-MM-DD");
var duration = moment.duration(start.diff(end));
console.log(duration.asDays());
<script src="https://cdn.jsdelivr.net/momentjs/2.14.1/moment-with-locales.min.js"></script>
关于javascript - 使用 moment 计算 2 个日期之间的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56738328/