簡體   English   中英

創建具有CET時區的Date對象

[英]Create a Date object with CET timezone

要在UTC中創建Date對象,我們將編寫

new Date(Date.UTC(2012,02,30));

如果沒有Date.UTC,它將使用locale並創建Date對象。 如果必須為在世界各地運行該程序的CET創建Date對象,該怎么辦?

您不會在任何特定時區“中”創建JavaScript Date對象。 Date ETC以來,JavaScript Date對象始終以毫秒為單位工作。 它們具有應用本地時區偏移量和規則( getHours而不是getUTCHours )的方法,但僅應用本地時區。 您不能設置 Date對象用於其“本地”方法的時區。

您對Date.UTC所做的Date.UTC (正確的是,除了02的前導0以外)只是使用UTC中該日期/時間(3月30日午夜)使用適當的毫秒值(因為自Epoch值)初始化對象,而new Date(2012, 2, 30)會將其解釋為當地時間3月30日午夜。 除初始化對象的Date對象沒有其他區別。

如果您需要的不是本地時區,則可以使用Date函數的UTC版本,並為您要使用的時區應用自己的偏移量和規則,這並非易事。 (偏移量是微不足道的;規則並非如此。)

如果您去尋找,可以找到可以為您處理時區的Node模塊。 剛才對“節點時區”的快速搜索使我成為了timezone 它還給了我這個SO問題SO問題以及Node時區模塊列表的鏈接

function getCETorCESTDate() {
    var localDate = new Date();
    var utcOffset = localDate.getTimezoneOffset();
    var cetOffset = utcOffset + 60;
    var cestOffset = utcOffset + 120;
    var cetOffsetInMilliseconds = cetOffset * 60 * 1000;
    var cestOffsetInMilliseconds = cestOffset * 60 * 1000;

    var cestDateStart = new Date();
    var cestDateFinish = new Date();
    var localDateTime = localDate.getTime();
    var cestDateStartTime;
    var cestDateFinishTime;
    var result;

    cestDateStart.setTime(Date.parse('29 March ' + localDate.getFullYear() + ' 02:00:00 GMT+0100'));
    cestDateFinish.setTime(Date.parse('25 October ' + localDate.getFullYear() + ' 03:00:00 GMT+0200'));

    cestDateStartTime = cestDateStart.getTime();
    cestDateFinishTime = cestDateFinish.getTime();

    if(localDateTime >= cestDateStartTime && localDateTime <= cestDateFinishTime) {
        result = new Date(localDateTime + cestOffsetInMilliseconds);
    } else {
        result = new Date(localDateTime + cetOffsetInMilliseconds);
    }

    return result;
}

暫無
暫無

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

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