我使用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的新手,但我认为有正确的判断方法。
谢谢!
答案 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,将时间设置为公共值(比如零)并测试时间值,例如:
// 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;
答案 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
}