我将我的日期转换为moment.js,现在我想将它与另一个日期(在这种情况下为'now')进行比较。
与使用moment.js isAfter
函数相比,与日期对象的简单比较似乎很多。
Date
对象时使用快捷方式?我的所有日期都是UTC。
function executeTests() {
isAfterTest();
compareTest();
}
function isAfterTest() {
console.time('isAfterTest');
var now = new Date();
var dateOfBirth = moment('2000-01-01');
for (var i = 0; i < 50000; i++) {
var x = dateOfBirth.isAfter(now);
}
console.timeEnd('isAfterTest');
}
function compareTest() {
console.time('compareTest');
var now = new Date();
var dateOfBirth = moment('2000-01-01');
for (var i = 0; i < 50000; i++) {
var x = dateOfBirth > now;
}
console.timeEnd('compareTest');
}
<script src="http://cdnjs.cloudflare.com/ajax/libs/moment.js/2.7.0/moment-with-langs.js"></script>
<button onclick="executeTests();">Run Test</button>
结果:
isAfterTest: 3754.000ms (index):32
compareTest: 24.000ms
答案 0 :(得分:2)
查看文档http://momentjs.com/docs/,isAfter方法接受不同类型的日期格式:
moment().isAfter(Moment|String|Number|Date|Array);
这意味着它需要进行类型检查,然后在运行计算之前将其转换为日期对象。
可以减少这种影响的一种方法是传入一个Moment对象作为比较日期:
function isAfterTest() {
console.time('isAfterTest');
var now = moment();
var dateOfBirth = moment('2000-01-01');
for (var i = 0; i < 50000; i++) {
var x = dateOfBirth.isAfter(now);
}
console.timeEnd('isAfterTest');
}
我创造了一个比较小提琴,但这似乎并没有改善它: http://jsfiddle.net/kmturley/t4grs0p7/7/
查看您的版本我相信您应该使用valueOf()方法来比较值:
window.compareTest2 = function() {
console.time('compareTest2');
var now = moment().valueOf();
var dateOfBirth = moment('2000-01-01').valueOf();
for ( var i = 0; i < 50000; i++ )
var x = dateOfBirth > now;
console.timeEnd('compareTest2');
}
这是一个工作示例: http://jsfiddle.net/kmturley/t4grs0p7/8/