2011-07-29 42 views
2

我有一个日期格式这样2011-07-29T08:18:39获得最新的JavaScript毫秒

我想转换此日期前奏毫秒 我尝试

var myDate = '2011-07-29T08:18:39';  
new Date(myDate.replace("T"," ")).getTime() 

但显示我的NaN 。 请帮忙 谢谢

+0

请注意,您接受的解决方案不适用于任何已发布的IE版本。 –

+0

他现在更新它,所以它的工作。 –

回答

6

T.J.是对的;我的原始解决方案在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); 
+0

在你的第一个例子中,你为什么要更换一个不存在的“T”?这是一个错字吗? –

+0

是的,这是一个错字,我的坏....固定。 – AWinter

+0

你也不能依赖'Date.parse',因为你不能依赖'new Date(string)'的原因。 –

5

问题是没有得到毫秒(你是这样做的),它得到的日期。

很多浏览器仍然不支持该字符串格式,包括IE的所有发布版本,甚至IE9。这是因为ISO-8601格式在大约一年半前才被添加到第5版的规格中;在此之前,之前的规范只是说他们必须接受任何Date#toStringDate#toUTCString吐出,而那些被定义为“依赖于实现”的字符串。例如,你不能依赖他们的格式。完全一样。

直到第5版规范的更改得到更广泛的实施(然后几年时间直到旧的浏览器仍未被大部分用户使用),您必须自己解析格式,或者使用类似DateJS的东西来为你做。

DateJS真的很凉爽,但如果你不想使用它,解析该格式是死很容易提供源总是给你正是格式(live copy):

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 
-1

使用正招 的javascript:警报(。(新的日期( '2011/07/29 8点18分39秒'))的getTime());

new Date('2011/07/29T08:18:39'.replace("T"," ")).getTime() 

给出1311923919000.这适用于Safari。

+1

你不能依赖这个。有些浏览器会这样做,有些则不会。 –

+0

那么人们不应该询问新功能?或者至少有一个人不应该回答有关新功能的问题! – QuentinUK

+2

你建议他将'-'字符改为'/'。如果它不适用于破折号(由新标准定义),则不适用于斜杠(* not *由新标准定义)。 –