我以为我对此有把握,但是我无法解决。
场景:
1)用户选择一个日期小部件,该小部件会传回本地时区中的日期,比如说上午10点“澳大利亚/悉尼”
2)用户然后通过标识符'Australia / Brisbane'选择一个不同的时区(这是一个不同的TZ,并且可能具有夏时制等),假设其+1小时
我想做的是有一个函数,该函数接受一个表示[10am'Australia / Sydney']的Date对象,并向我返回一个表示[10am'Australia / Brisbane]的新Date,即基础UTC时间将移了+1小时
theta
我一直在想时区,我无法让它做我想做的事。
答案 0 :(得分:0)
moment-timezone
库应该使这个琐碎的事情变得简单:
function convertToTimezone(date, newTimezone) {
return moment(date).tz(newTimezone);
}
或者如果date
已经是moment
:
function convertToTimezone(date, newTimezone) {
return date.clone().tz(newTimezone);
}
有关更多信息,请参见Converting to Zone上的文档。
答案 1 :(得分:0)
好的,FWIW,我自己也得到了答案。 moment.tz不能像我想象的那样工作。
总而言之,我想获取一个具有挂钟时间的javascript日期,例如与某个时区标识符相关联的“ 2018年9月15日上午10点”,例如BrisabneOz。
,然后将其转换为代表相同壁钟时间但在不同时区的新日期。换句话说,根据时区和/或夏令时等的变化来更改基础UTC时间。
我发现这样做的方法是获取挂钟日期的字符串,从而从tbe方程中剥离任何关联的时区,并使用moment.tz使用新的不同时区来制作另一个日期对象。它可以做什么。
让我感到困惑的部分是必须走到弦上-认为我可以传递一个日期并获得moment.tz来魔术另一个日期,例如@Alex Taylor答案,但这实际上不起作用。
function convertDateToTimezone(date, timezone) {
const str = moment(date).format('YYYY-MM-DD HH:mm:ss');
const tzMoment = moment.tz(str, timezone.identifier)
return tzMoment.toDate()
}