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