Moment .isAfter 没有正确返回

新手上路,请多包涵

我有一个以 UTC 时间存储的字符串。我想看看这个时间是否在当前 UTC 时间之后。我正在使用 momentjs,当只有 1 小时的差异时,isAfter() 方法返回不正确的值。

active_time 变量发生在 15:00 utc。 current_time 设置为 16:00 utc。所以我认为 active_time.isAfter(current_time) 应该返回 false 但它正在返回 true 。我怎样才能让它返回 false

jsFiddle 链接: http://jsfiddle.net/Ln1bz1nx/

代码:

 //String is already in utc time
var active_time = moment('2015-06-04T15:00Z', 'YYYY-MM-DD[T]HH:mm[Z]');

//Convert current time to moment object with utc time
var current_time = moment( moment('2015-06-04T16:00Z').utc().format('YYYY-MM-DD[T]HH:mm[Z]') );

console.log('active_time =',active_time);
console.log('current_time =',current_time);
console.log( active_time.isAfter(current_time) ); //Why does this return true?

原文由 Mdd 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 867
2 个回答

即使第一个日期字符串是 utc,您仍然需要在比较之前将时刻设置为 utc 模式。看看这里的文档: http ://momentjs.com/docs/#/parsing/utc/

 //String is already in utc time, but still need to put it into utc mode
var active_time = moment.utc('2015-06-04T15:00Z', 'YYYY-MM-DD[T]HH:mm[Z]');

//Convert current time to moment object with utc time
var current_time = moment.utc('2015-06-04T16:00Z', 'YYYY-MM-DD[T]HH:mm[Z]');

console.log('active_time =',active_time.format());
console.log('current_time =',current_time.format());
console.log( active_time.isAfter(current_time) );
 <script src="https://rawgit.com/moment/moment/develop/moment.js"></script>

原文由 Alexander Lindsay 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您的日期是 ISO8601 格式或时间戳,请不要使用 moment.isAfter。它比比较 2 个日期对象慢 150 倍: http://jsperf.com/momentjs-isafter-performance

  var active_time = new Date('2015-06-04T15:00Z');
 var current_time = new Date('2015-06-04T16:00Z');

 console.log('active_time =',active_time);
 console.log('current_time =',current_time);
 console.log( active_time > current_time );

原文由 Pierre Inglebert 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题