我有一个像这样的日期格式2011-07-29T08:18:39
我想转换这个日期介绍我尝试的毫秒
var myDate = '2011-07-29T08:18:39';
new Date(myDate.replace("T"," ")).getTime()
Run Code Online (Sandbox Code Playgroud)
但是告诉我NaN.请帮忙谢谢
TJ是对的; 我的原始解决方案在IE9和Safari中失败了.这样做,并适用于所有主流浏览器.
var myDate = '2011-07-29T08:18:39';
function parseDate(dateString){
var time = Date.parse(dateString);
if(!time){
time = Date.parse(dateString.replace("T"," "));
if(!time){
bound = dateString.indexOf('T');
var dateData = dateString.slice(0, bound).split('-');
var timeData = dateString.slice(bound+1, -1).split(':');
time = Date.UTC(dateData[0],dateData[1]-1,dateData[2],timeData[0],timeData[1],timeData[2]);
}
}
return time;
}
var milliseconds = parseDate(myDate);
Run Code Online (Sandbox Code Playgroud)
问题是没有得到毫秒(你正在做的那样),它正在得到日期.
许多浏览器仍然不支持该字符串格式,包括所有已发布的IE版本,甚至是IE9.那是因为ISO-8601风格的格式仅在大约一年半前的第5版中添加到规范中; 在此之前,之前的规范只是说他们必须接受任何东西Date#toString并Date#toUTCString吐出来,并且那些被定义为"依赖于实现"的字符串.例如,你不能依赖他们的格式.完全没有.
直到第5版规范中的更改被更广泛地实现(然后几年过去,直到较旧的浏览器仍未被相当大部分的用户库使用),您将不得不自己解析格式,或使用类似的东西DateJS为你做的.
DateJS真的很酷,但是如果你不想使用它,解析那种格式很容易,只要你的源码总是给你那种格式(实时拷贝):
var myDate, parts, date, time, dt, ms;
myDate = '2011-07-29T08:18:39';
parts = myDate.split(/[T ]/); // Split on `T` or a space to get date and time
date = parts[0];
time = parts[1];
dt = new Date();
parts = date.split(/[-\/]/); // Split date on - or /
dt.setFullYear(parseInt(parts[0], 10));
dt.setMonth(parseInt(parts[1], 10) - 1); // Months start at 0 in JS
dt.setDate(parseInt(parts[2], 10));
parts = time.split(/:/); // Split time on :
dt.setHours(parseInt(parts[0], 10));
dt.setMinutes(parseInt(parts[1], 10));
dt.setSeconds(parseInt(parts[2], 10));
ms = dt.getTime(); // or ms = +dt; if you want to be l33t about it
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5966 次 |
| 最近记录: |