簡體   English   中英

在用戶的時區顯示日期/時間 - 在客戶端

[英]Displaying date/time in user's timezone - on client side

我有一個Web應用程序,在每個頁面上顯示日期時間戳,例如:

2009年12月12日下午6點

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

所以紐約用戶會看到:

2009年12月12日下午6點

加州用戶會看到:

2009年12月12日下午3:00

有什么建議么?

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

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

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

格式化日期是另一回事。 Javascript並沒有提供太多的內置。你可以自己破解它,但那樣的錯誤和瘋狂就在於此。 日期格式化是任何好的Javascript庫應該提供的東西。 例如,JQuery具有Datepicker.formatDate

這是你如何通過精彩的“漸進增強”來實現的:

輸出您希望它出現的日期,但請務必指定其時區(我在這里使用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>

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM