【问题标题】:Obtain milliseconds from date javascript从日期javascript获取毫秒
【发布时间】:2014-06-10 01:32:03
【问题描述】:

我有这样的日期格式 2011-07-29T08:18:39

我想将此日期转换为毫秒 我试试

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

但显示 NaN。 请帮忙 谢谢

【问题讨论】:

  • 请注意,您接受的以下解决方案不适用于任何已发布的 IE 版本。
  • 他现在已经更新了它,所以它可以工作了。

标签: javascript date


【解决方案1】:

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);

【讨论】:

  • 在您的第一个示例中,您为什么要替换不存在的T?是不是笔误?
  • 你也不能依赖Date.parse,同样的原因你不能依赖new Date(string)
  • Date.parse 被所有主流浏览器支持。 w3schools.com/jsref/jsref_parse.asp
  • 是的,Date.parse 由第 3 版规范定义,但 它接受的内容 不是 ISO-8601 样式的日期。 所有您可以依靠的是它接受Date#toStringDate#toUTCString 吐出的内容。在这两种情况下,规范都说“......字符串的内容取决于实现......”(第 15.9.5.2 和 15.9.5.42 节)。浏览器可能超出此范围,但并非所有浏览器都这样做。 IE不支持,IE9也不支持:jsbin.com/otupum/2
  • AWinter:你不知道谁对答案投了反对票。您知道我发表了评论,并且您知道有人投了反对票。这就是你所知道的。通常情况下,发表评论的人没有投反对票,而投反对票的人也没有发表评论。 (不是这一次,我投了反对票,因为这个解决方案不起作用,这就是反对票的目的。)
【解决方案2】:

问题不在于获取毫秒数(您做得对),而是获取日期。

很多浏览器仍然不支持这种字符串格式,包括所有已发布的 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

【讨论】:

    猜你喜欢
    • 2017-02-14
    • 2014-10-12
    • 2012-11-20
    • 2013-07-28
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    相关资源
    最近更新 更多