2016-02-14 63 views
0

我想以可讀格式顯示時間。所以我使用下面的js代碼。但是Chrome和IE的輸出結果是不同的。如何更改代碼以在所有瀏覽器中提供相同的輸出?日期格式化在Chrome中的結果與其他瀏覽器中的結果不同嗎?

在IE中輸出:上午12時46

在Chrome中:上午06點16

時區:UTC +05:30

var unReadableDate = "2016-01-25T00:46:00"; 
 
    var newDate = new Date(unReadableDate); 
 
    //var timeZoneOffset = (new Date()).getTimezoneOffset(); 
 
    //newDate.setMinutes(newDate.getMinutes() - timeZoneOffset); 
 
    alert(formatAMPM(newDate)); 
 

 
    //below function formats time in am and pm 
 
    function formatAMPM(date) { 
 
     var hours = date.getHours(); 
 
     var minutes = date.getMinutes(); 
 
     var ampm = hours >= 12 ? 'pm' : 'am'; 
 
     hours = hours % 12; 
 
     hours = hours ? hours : 12; // the hour '0' should be '12' 
 
     minutes = minutes < 10 ? '0' + minutes : minutes; 
 
     var strTime = hours + ':' + minutes + ' ' + ampm; 
 
     return strTime; 
 
    }

+0

對於我來說,Chrome的輸出'1:46 am'。問題可能與用戶時區有關。順便說一句,Firefox也輸出'12:46 am'。 – Philipp

+0

不要使用Date構造函數解析字符串,它不可靠(正如您發現的那樣)。不帶時區的ISO 8601日期時間字符串應視爲本地(即考慮系統時區偏移量),但某些瀏覽器不會,有些瀏覽器根本不會解析它。手動解析字符串,它只需要一個2行函數或庫。 – RobG

回答

1

能否請您嘗試更換此

var unReadableDate = "2012-06-25T00:46:00.000Z" 
 
    var newDate = new Date(unReadableDate); 
 
    //var timeZoneOffset = (new Date()).getTimezoneOffset(); 
 
    //newDate.setMinutes(newDate.getMinutes() - timeZoneOffset); 
 
    alert(formatAMPM(newDate)); 
 

 
    //below function formats time in am and pm 
 
    function formatAMPM(date) { 
 
     var hours = date.getHours(); 
 
     var minutes = date.getMinutes(); 
 
     var ampm = hours >= 12 ? 'pm' : 'am'; 
 
     hours = hours % 12; 
 
     hours = hours ? hours : 12; // the hour '0' should be '12' 
 
     minutes = minutes < 10 ? '0' + minutes : minutes; 
 
     var strTime = hours + ':' + minutes + ' ' + ampm; 
 
     return strTime; 
 
    }

+0

是的..這個工程..它在Chrome和IE中都給出了相同的結果 – Karthik

+0

好。如果您認爲這是正確的答案,請接受它。謝謝 –

1

使用JavaScript日期構造函數將UTC格式字符串轉換爲日期不可靠。如果你想用日期解決時區問題,你應該使用moment.js。要了解更多,你可以使用下面的鏈接。

來解決問題

Javascript Date issue

或簡單的方法是在日期,而不是完整的字符串傳遞單個參數。要了解更多,您可以使用下面的鏈接

DateTime UTC

+0

唯一明智的答案。 – RobG

1

你的問題是,你的日期字符串被視爲本地時間與它被視爲UTC。

只要通過指定時區使其明確無誤。更改

var unReadableDate = "2016-01-25T00:46:00"; 

var unReadableDate = "2016-01-25T00:46:00Z"; 
+0

感謝您的回答。但解決方案無法正常工作 – Karthik

+0

奇怪(我試圖在IE11與Chrome btw)。您是否嘗試過使用不同的構造函數指定日期對象(例如'new Date(2016,1,25,0,46,0)') – potatopeelings

+0

請參閱Nitin Garg的答案。不要使用Date構造函數解析字符串。 – RobG

相關問題