我正在编写一个函数,该函数应该检查给定的dateString是否与浏览器timeZone具有相同的timeZone。要获得浏览器timeZone,我可以使用a) Intl.DateTimeFormat().resolvedOptions().timeZone
(例如返回Europe/Amsterdam
)或b)返回-60
的new Date().getTimeZoneOffset()
。两人都很好。
棘手的部分是从我想传递的timeZone中获取dateString,例如:2021-01-01T00:00:00-05:00
(应该是America/New_York
或300
AFAIK)。我怎样才能从那个日期得到timeZone呢?我尝试过这样做:new Date('2021-01-01T00:00:00-05:00').getTimeZoneOffset()
,但这将再次将其转换为浏览器的timeZone,并返回-60
。
功能示例:
function isSameTimeZone(date) {
// function to get time zone here
const a = getTimeZone(date)
return a === new Date().getTimeZoneOffset() || Intl.DateTimeFormat().resolvedOptions().timeZone
}
测试案例
2021-01-01T00:00:00-08:00
(SF)
2021-01-01T00:00:00-05:00
(纽约)
2021-01-01T00:00:00+05:30
(孟买)
2021-01-01T00:00:00+01:00
(阿姆斯特丹)
有人找到解决办法了吗?提前感谢!
发布于 2021-03-15 19:36:42
这是我的方法;
function checkTimezone(dateString) {
const testDate = new Date(dateString);
const dateRegex = /\d{4}-\d{2}-\d{2}/;
const myDate = new Date(testDate.toISOString().match(dateRegex)[0]);
return !(testDate - myDate);
}
const testCases = ['2021-01-01T00:00:00-05:00', '2021-01-01T00:00:00-08:00', '2021-01-01T00:00:00-05:00', '2021-01-01T00:00:00+05:30', '2021-01-01T00:00:00+01:00'];
testCases.forEach(testCase => console.log(checkTimezone(testCase)));
下面是它的工作原理,您传递日期字符串并使用它创建一个new Date()
实例。
然后,我使用Date.ISOString()
方法获得ISO字符串,并将其与原始字符串匹配,以获得日期,并在不需要时间的情况下从其中创建另一个Date
实例。
然后,我找出差异(以毫秒为单位),并将其转换为分钟。
https://stackoverflow.com/questions/66642676
复制相似问题