将包含特定格式的日期的字符串解析为Javascript中的Date对象

时间:2010-12-13 23:29:16

标签: javascript regex parsing string

我正在学习Javascript作为一种新语言,我想到了一个很好的方法来习惯JS如何处理reg exp和字符串操作是将包含日期的字符串解析为Date对象。

我有一个"2005-05-28"形式的字符串。什么是将其解析为Date对象的最佳Javascript-y方法?

2 个答案:

答案 0 :(得分:3)

非正则表达式

我不知道“最好”,但你不需要正则表达式:

var str = "2005-05-28";
var parts = str.split("-");
var dt = new Date(parseInt(parts[0], 10),
                  parseInt(parts[1], 10) - 1,
                  parseInt(parts[2], 10));

Live example

使用String#split来打破-字符上的字符串,然后使用接受年,月(从0开始)和日(从1开始)的Date构造函数。

正则表达式

请注意,如果您真的希望使用正则表达式,您可以:

var str = "2005-05-28";
var parts = str.match(/^(\d{1,4})-(\d{1,2})-(\d{1,2})$/);
if (parts) {
    var dt = new Date(parseInt(parts[1], 10),
                      parseInt(parts[2], 10) - 1,
                      parseInt(parts[3], 10));
}

Live example

它使用带有捕获组的正则表达式,通过String#match进行匹配,返回一个数组,其索引为0,后跟捕获组。但是对于我的钱,正则表达式并没有真正为你买任何东西。

除了

如果您的日期字符串变得更复杂或可能会有所不同,我会将问题归结为DateJS这样的库。但如果你的格式是常规的,你就是金色的。

答案 1 :(得分:-1)

该格式对于标准JS日期是可接受的。所以你只需这样做:

var dateObject = new Date("2005-05-28");
编辑:以上是错的,TJ是对的;我被一个懒惰的答案所困扰。它甚至在Firefox中解析不正确,从日期中减去一个。

看到这个问题比我想象的要棘手,我仔细地进行了一些测试。 IE(和其他人)将接受斜杠而不是破折号(实现胜过规范)。因此,上面的内容将使用简单的replace():

var dateObject = new Date(("2005-05-28").replace("-", "/"));

请注意,我也使用MM / DD / YYYY成功测试了这个:

var dateObject = new Date("05/28/2005");

所以斜杠将在所有主流浏览器(包括IE6)中解析。