获取源时区的小时数

问题描述 投票:-1回答:2

假设我有一个ISO字符串日期; JS或MomentJS中是否有任何简单的API可以提取原始时区中的小时(不是本地时区,不是UTC):

//eg

2020-04-01T05:00:00+02:00 -> 7
javascript date datetime momentjs
2个回答
1
投票

您的示例没有道理。对于表示时区+0200中的时间“上午5点”的时间戳,“原始时区中的小时”为5。因为那是您的时间戳记表示的时间。以UTC表示的小时应为[[3,因为在时区+0200的时间为凌晨5点,在UTC的时间是凌晨3点。

const tz = moment('2020-04-01T05:00:00+02:00'); console.log(tz.hour()); console.log(tz.utc().hour());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.25.3/moment.min.js"></script>
要获得

7,您需要将时间戳转换为+0400时区。在+0200的凌晨5点,在+0400的凌晨7点。但这完全是任意的,与任何“原始时区”都没有关系。


1
投票
简短的回答是“否”。

字符串被解析为时间值,该时间值是相对1970-01-01T00:00:00Z(ECMAScript时期)的偏移量,因此有效地是UTC。创建的日期实例不知道其创建方式,因此无法使用Date实例从用于生成日期实例的原始字符串中恢复任何信息。

[您必须自己解析该字符串以从中获取任何值(库可能会有所帮助,我认为Luxon可能会点它),例如获取原始时间:

['2020-05-12T08:23:15.000+05:30', '2020-05-12T08:23:15.000-0400', '2020-05-12T08:23:15.000Z'].forEach(ts => { let [year, month, day, hour, minute, second, millisecond, offset] = ts.match(/^\d+|\d\d\d|\d\d|Z$|[+-]\d\d:?\d\d$/g); console.log( `year : ${year} month : ${month} day : ${day} hour : ${hour} minute : ${minute} second : ${second} millsecond: ${millisecond} offset : ${offset} `); });
如果偏移量是按照ISO 8601表示的(例如+07:00或+0700),则它是固定的偏移量,不会反映历史或夏时制更改,该更改可能适用于生成该偏移量的系统,因此仅应应用到特定的日期和时间。    
© www.soinside.com 2019 - 2024. All rights reserved.