繁体   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