2009-12-03 78 views
7

我有每一頁上顯示的日期時間郵票的Web應用程序,例如:顯示日期/時間用戶的時區 - 在客戶端

2009年12月12日下午6:00

我想動態檢測用戶的時區並使用JavaScript更改顯示。

所以紐約用戶將看到:

2009年12月12日下午6:00

雖然加州用戶將看到:

2009年12月12日3 :00 pm

有什麼建議嗎?

+2

http://prideparrot.com/blog/archive/2011/9/how_to_display_dates_and_times_in_clients_timezone – VJAI 2011-09-26 07:31:08

回答

2

這裏是你如何能與精彩的「漸進增強」做到這一點:

輸出,你希望它出現的日期,但一定要指定其時區(我用GMT在這裏,但你可以使用UTC等)。然後將其與本地加載時間交換(如果提供了原始時區,則由JavaScript自動處理)。

<div id="timestamp">December 12, 2009 6:00 pm GMT</div> 
<script type="text/javascript"> 
    var timestamp = document.getElementById('timestamp'), 
     t   = new Date(timestamp.innerHTML), 
     hours  = t.getHours(), 
     min  = t.getMinutes() + '', 
     pm  = false, 
     months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']; 

    if(hours > 11){ 
     hours = hours - 12; 
     pm = true; 
    } 

    if(hours == 0) hours = 12; 
    if(min.length == 1) min = '0' + min; 

    timestamp.innerHTML = months[t.getMonth()] + ' ' + t.getDate() + ', ' + t.getFullYear() + ' ' + hours + ':' + min + ' ' + (pm ? 'pm' : 'am'); 
</script> 
+0

我懷疑IE會正確解析這種格式。 – Bergi 2013-02-08 13:51:51

+0

@Bergi - 它在IE8下工作+ – 2013-02-25 19:30:51

+0

在IE 11中不起作用 – 2015-03-17 20:56:09

6

您可以使用Date.getTimeZoneOffset()從GMT獲取本地偏移量。

var date = new Date(); 
var offset = date.getTimezoneOffset(); 

從那裏有一個SMOP。使用Javascript Date對象,您可以撥打date.toDateString來獲取人類可讀的日期。如果您需要服務器端,請使用GET或POST將Javascript偏移量發送到您的服務器。

格式化日期是另一回事。 Javascript並沒有提供太多的內置功能。你可以自己破解它,但這種方式的錯誤和瘋狂的謊言。日期格式化是任何好的Javascript庫應該提供的。例如,JQuery有Datepicker.formatDate

0

我們使用ExtJS庫,裏面有關於日期和時間,它可以幫助你很多的功能。事實上,在我的Mozilla Firefox上,它根據瀏覽器時區顯示所有日期和時間。

相關問題