我正在学习Javascript作为一种新语言,我想到了一个很好的方法来习惯JS如何处理reg exp和字符串操作是将包含日期的字符串解析为Date对象。
我有一个"2005-05-28"
形式的字符串。什么是将其解析为Date对象的最佳Javascript-y方法?
答案 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));
使用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));
}
它使用带有捕获组的正则表达式,通过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)中解析。