2016-02-03 76 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);

要包括驗證缺少值的支持增加了多一行多一點的代碼。