[英]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.