如何通过时刻()判断第二天的日子

时间:2016-02-29 07:13:11

标签: javascript momentjs

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

这是一个问题:

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

如果我这样写:

 app.post('/profile', upload.single('avatar'), function (req, res, next) {
 // req.file is the `avatar` file
 // req.body will hold the text fields, if there were any
 })

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

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

谢谢!

4 个答案:

答案 0 :(得分:2)

如果你使用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()link to docs来解释突出显示的问题。

答案 1 :(得分:1)

如果你有两个约会,想要看看第二天是否是另一个, 只需在&#34;之前添加一天&#34; date,将时间设置为公共值(比如零)并测试时间值,例如:

&#13;
&#13;
// 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  
);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

我建议:

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

答案 3 :(得分:0)

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

您想知道的是今天与另一个时间之间的时差。

否:#24小时两次之间。

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
}