如何通过 moment() 判断第二天是第二天

How to judge the day is next day via moment()

本文关键字:第二天 判断 何通过 moment      更新时间:2023-09-26

我使用Moment来处理代码中的时间。

这里有一个问题:

我想判断两次,如果现在是第二天last_take_time

如果我这样写:

   if not last_take_time? or (now.dayOfYear() - last_take_time.dayOfYear() is 1 )
      do_something()

当last_take_time是一年的结束日时,出现问题。

我是JavaScript和Moment的新手,但我认为有一个正确的方法来判断这一点。

谢谢!

如果您使用dayOfWeek()那么添加一个额外的子句来测试周日/周一的棘手情况是相当容易的:

if(last_take_time && (now.dayOfWeek() - last_take_time.dayOfWeek() == 1 
        || (now.dayOfWeek() == 1 && last_take_time.dayOfWeek() == 7)))
    do_something();

这比处理dayOfYear()更容易,因为必须处理闰年。

编辑

啊,好吧,我明白了,你的观点很有道理——当日子相隔一周以上时,上面的答案会返回误报。我们可以添加一个子句来解释这一点:

if(last_take_time && now.diff(last_take_time, 'days') < 3
        && (now.dayOfWeek() - last_take_time.dayOfWeek() == 1
        || (now.dayOfWeek() == 1 && last_take_time.dayOfWeek() == 7)))
    do_something();

附加子句使用 moment.js 方法 diff() : 链接到文档以说明突出显示的问题。

如果你有两个约会,并且想看看一个是不是第二天,只需在"较早"的日期上添加一天,将时间设置为通用值(例如零)并测试时间值,例如:

// Return true if d1 is the day after d0
function isTomorrow(d0, d1) {
  d0 = new Date(+d0);
  d0.setDate(d0.getDate() + 1);
  return d0.setHours(0,0,0,0) == new Date(+d1).setHours(0,0,0,0);
}
document.write(
           isTomorrow(new Date(2016,1,28), new Date(2016,1,29)) // true
+ '<br>' + isTomorrow(new Date(2016,1,28), new Date(2016,2,1))  // false  
+ '<br>' + isTomorrow(new Date(2016,1,28,23,59), new Date(2016,1,29,0,1))  // true  
+ '<br>' + isTomorrow(new Date(2016,1,28,0,0), new Date(2016,1,29,23,59))  // true  
);

我建议:

if not last_take_time? or (now.startOf('day').add(1, 'day').isSame(last_take_time.startOf('day')) )
  do_something()

我认为这比以前的解决方案简单一些:

你想知道的是现在的一天和另一个时间的一天之间的区别。

不是:#24 小时周期在 2 次之间。

let now = moment();
let otherDay = moment("some other day");
let daysDiff = otherDay.startOf('day').diff(now, 'days');
if(daysDiff == 1) {
  // now is tomorrow relative to otherDay
}