首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将今天的日期与时刻中的另一个日期进行比较会返回错误的日期,为什么?

将今天的日期与时刻中的另一个日期进行比较会返回错误的日期,为什么?
EN

Stack Overflow用户
提问于 2012-09-26 10:13:20
回答 2查看 36.5K关注 0票数 28

我正在使用moment.js 1.7.0来尝试将今天的日期与另一个日期进行比较,但是diff函数显示由于某种原因,它们相隔1天。

代码

代码语言:javascript
复制
var releaseDate = moment("2012-09-25");
var now = moment(); //Today is 2012-09-25, same as releaseDate  
console.log("RELEASE: " + releaseDate.format("YYYY-MM-DD"));
console.log("NOW: " + now.format("YYYY-MM-DD"));
console.log("DIFF: " + now.diff(releaseDate, 'days'));

控制台

代码语言:javascript
复制
RELEASE: 2012-09-25
NOW: 2012-09-25
DIFF: 1 

想法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 10:55:13

基于documentation (和简短的测试),moment.js创建了date对象的包装器。声明:

代码语言:javascript
复制
var now = moment();

创建一个"moment“对象,它的核心有一个新的Date对象,就像由new Date()创建的一样,因此小时、分钟和秒将被设置为当前时间。

声明:

代码语言:javascript
复制
var releaseDate = moment("2012-09-25");

创建一个moment对象,该对象的核心将创建一个新的Date对象,就像由new Date(2012, 8, 25)创建的一样,其中,对于本地时区,小时、分钟和秒都将设置为零。

moment.diff根据两个日期之间的四舍五入的差值(以ms为单位)返回一个值。要查看完整的值,请将true作为第三个参数传递:

代码语言:javascript
复制
 now.diff(releaseDate, 'days', true)
 ------------------------------^

因此,它将取决于运行代码的时间和本地时区now.diff(releaseDate, 'days')是0还是1,即使在相同的本地日期运行也是如此。

如果您只想比较日期,则使用:

代码语言:javascript
复制
var now = moment().startOf('day'); 

这会将时间设置为当地时区的00:00:00。

票数 62
EN

Stack Overflow用户

发布于 2014-01-19 05:14:29

RobG的答案对于这个问题是正确的,所以这个答案只适用于那些正在搜索如何比较momentjs中的日期的人。

我尝试像上面提到的那样使用startOf('day'):

代码语言:javascript
复制
var compare = moment(dateA).startOf('day') === moment(dateB).startOf('day');

这对我不起作用。

我不得不使用isSame

代码语言:javascript
复制
var compare = moment(dateA).isSame(dateB, 'day');
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12593653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档