2016-02-03 54 views
1

Mozilla浏览器中我已尽力让我的时间戳在JavaScript像strtotime在PHP回报Date.parse NaN的

我的代码:

//var start_date = data.result[0].start_date; 
var start_date = "2011-01-26 13:51:50"; 
var d = Date.parse(start_date)/1000; 
console.log(d); 
// 1296030110 

上面的代码是在铬工作的罚款。但不适用于Mozilla浏览器。我得到NaN价值。请帮帮我。

在谷歌搜索后,我找到了一个解决方案,在日期和时间之间添加T。所以我补充说。我得到的输出,但在两个浏览器的输出是不一样的。

var start_date = "2011-01-26T13:51:50"; 
var d = Date.parse(start_date)/1000; 
console.log(d); 
//Mozilla = 1296030110 
//Chrome = 1296044910 
+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse –

+0

也在时间后添加时区指示符,然后它将一致地工作 – Bergi

+0

它必须是再次说:**不要使用Date构造函数**解析字符串。 OP中的格式不是ECMAScript 2015所认可的格式(所有使用的浏览器都不支持),因此它的处理方式完全取决于实现(包括作为无效日期)。总是手动分析字符串,要么写自己的两行功能,要么使用库。 – RobG

回答

0

试试这个工作对于所有浏览器

start_date="2011-01-26 13:51:50".replace(" ","T"); 
start_date = new Date(start_date); 
var d = start_date.getTime()/1000; 
+0

不适用于Mozilla浏览器。你在Mozilla尝试过吗? – Chinmay235

+0

检查http://stackoverflow.com/questions/18932229/gettime-in-chrome-and-firefox-different-result –

+0

你如何期待被解析? ISO 8601认为它是本地的,但ECMASCript 2015被解释为将其视为UTC。 – RobG

0
var start_date = "2011-01-26 13:51:50"; 
var d = Date.now(start_date); 
console.log(d); 

将在mozila 运行,你不需要任何计算 它会自动转换为毫秒。

0

试试这个。我不确定这个结果是否完美。

var start_date = Date("2011-01-26 13:51:50"); 
var d = Date.parse(start_date)/1000; 
console.log(d); 
//1454478429 
0

这将工作

var start_date = "Jan 26,2011 13:51:50 "; 
    var d = Date.parse(start_date)/1000; 
    console.log(d); 

因为

Date.parse()方法解析日期的字符串表示,由于January 1, 1970, 00:00:00 UTC or NaN的毫秒数。如果字符串是无法识别或包含非法日期值(e.g. 2015-02-31)

解析()方法接受一个日期字符串(such as "Dec 25, 1995")以来January 1, 1970, 00:00:00 UTC.返回的毫秒数

+0

ECMAScript 2015允许实现以任何他们想要的方式(包括作为无效日期)处理不符合ISO 8601标准的字符串。它也脱离了ISO 8601中日期表单的处理方式,所以仅仅因为你测试的少数几个实现按照你的预期分析了字符串并不意味着它们都会。 – RobG

4

不解析与Date构造函数或Date.parse(他们做同样的事情)的字符串,这是极不可靠,尤其是对于非标准字符串(以及一些)。解析“2011-01-26十三点51分50秒”为本地时间,使用图书馆或一个简单的功能,如:

function parseDateTime(s) { 
 
    var b = s.split(/\D/); 
 
    return new Date(b[0],b[1]-1,b[2],b[3],b[4],b[5]) 
 
} 
 

 
document.write(parseDateTime("2011-01-26 13:51:50")/1000);

要包括验证缺少值的支持增加了多一行多一点的代码。