不知道我是否具有正确的参数,语法,或者是完全不能正确使用它,而是在使用“ isSameOrAfter”时,在检查当前utc日期时间是否在日期之后是否返回假时应为true
var utcDateTime = "8/28/2018 7:30:00 PM";
var oneDayBefore = moment(utcDateTime, "M/D/YYYY h:mm:ss A").subtract(1, 'days');
// oneDayBefore should now be 8/27/2018 7:30:00 PM
if (moment().utc().isSameOrAfter(oneDayBefore, 'day')) {
alert('is same or after')
};
更新-我想我已解决它,但是请告知这是否是检查当前utc时刻日期时间是否相同或经过1天之后的最好方法
moment().utcOffset((moment().utcOffset() * -1)).isSameOrAfter(oneDayBefore, 'day')
答案 0 :(得分:0)
我想我已经找到了两种方法来做,但是请告知,我对方法中可以设置的天数,分钟数等参数有些困惑
var utcDateTime = "8/28/2018 7:30:00 PM";
var oneDayBefore = moment(utcDateTime, "M/D/YYYY h:mm:ss A").subtract(1, 'days');
var currentUtcMoment = moment().utc().format("M/D/YYYY h:mm:ss A");
if (moment(currentUtcMoment).isSameOrAfter(oneDayBefore, 'day')) {
// do something
}
或
var utcDateTime = "8/28/2018 7:30:00 PM";
var oneDayBefore = moment(utcDateTime, "M/D/YYYY h:mm:ss A").subtract(1, 'days');
var currentUtcMoment = moment().utc().format("M/D/YYYY h:mm:ss A");
if (moment().utcOffset((moment().utcOffset() * -1)).isSameOrAfter(oneDayBefore, 'day')) {
// do something
}
答案 1 :(得分:0)
这是时区问题。您的oneDayBefore
使用默认的本地时区:
var oneDayBefore = moment(utcDateTime, "M/D/YYYY h:mm:ss A").subtract(1, 'days');
将您与之进行比较的那一刻使用的是UTC:
moment().utc().isSameOrAfter(oneDayBefore, 'day')
// ^^^^^^
如果您检查每个.format()
,则问题将更加清楚。例如,在我的时区(CST),我看到:
const utcDateTime = "8/28/2018 7:30:00 PM";
const oneDayBefore = moment(utcDateTime, "M/D/YYYY h:mm:ss A").subtract(1, 'days');
console.log(oneDayBefore.format());
// 2018-08-27T19:30:00-05:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
在我的时区,UTC午夜是当地时间19:00。因此,当地时间19:30实际上对应于第二天00:30 UTC时间。
因此,当您致电
moment().utc().isSameOrAfter
正在将当前UTC时间/天与您的"8/28 7:30:00 PM"
减去一天对应于当地时间的任何时间进行比较。但是,当地时间8/27 7:30 PM可能是UTC时间的8/28-因此,您正在将moment().utc()
(在撰写本文时为8/27 23:45)与8/28 00进行比较: 30(或类似的值-取决于您的时区)。
最好在内部尽可能多地使用UTC时间,并且仅在需要向用户显示时格式化它。也就是说,不用打电话
moment(utcDateTime...
致电
moment.UTC(utcDateTime...
,结果将与预期的一样:
const utcDateTime = "8/28/2018 7:30:00 PM";
const oneDayBefore = moment.utc(utcDateTime, "M/D/YYYY h:mm:ss A").subtract(1, 'days');
// ^^^^
console.log(oneDayBefore.format());
const now = moment.utc();
console.log(now.format());
console.log(now.isSameOrAfter(oneDayBefore, 'day'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>