2012-12-05 56 views
7

我想比较javascript中的ISO 8601日期作为字符串,而不是为每个字符串和比较对象创建Date对象。在JavaScript中比较ISO 8601日期字符串

var date_array = ['2012-10-01','2012-11-27','2012-12-23']; 
console.log(date_array[0] < date_array[1]) // gives true 
console.log(date_array[1] > date_array[2]) // gives false 

我这样做的原因是我认为比较字符串应该比使物体每个日期字符串和对象比较快。

这些比较似乎在某些浏览器中按预期工作。我可以期待这种按字母顺序排列的 lexicographic字符串比较可以在所有浏览器中工作吗?这种日期比较方法实际上比使用Date对象更快吗?

+2

如果格式来自大单元 - >小单元,并且所有字符串对于每个字段具有相同的长度(必要时填写前导0),则应该没有问题。 – nhahtdh

+1

相关链接:[Here](http://jsperf.com/date-object-creation/2)显示使用_Date_构造函数的操作数/秒,[here](http://jsperf.com/operator-vs -localecompage/3)是字符串比较和[这里](http://jsperf.com/inequality-str-vs-int)int比较。 –

+0

根据[维基百科](https://en.wikipedia.org/wiki/ISO_8601#General_principles),ISO 8601日期的组成部分按字典顺序排列,因此您应该很好地执行上述操作 – Dogoku

回答

6

使用该比较运算符将查看字符串值lexicographically,这意味着字典顺序

在ASCII,十进制数字被顺序地存储最小(00x30)到最大(90x39)。如果他们始终以这种格式,最大值(年)到最小值(日),并始终将0填充为最大可能值,那么这些比较就会很好。