Javascript 时间组件(如果UTC和时区已知)

Javascript 时间组件(如果UTC和时区已知),javascript,momentjs,Javascript,Momentjs,我有一个日期时间选择器,它使用getHours,getMinutes,。。初始化该值。如果时区与用户位置一致,则效果良好,但我想考虑用户TZ不同于当前浏览器区域设置的情况。我可以使用Intl.DateTimeFormat将日期正确格式化为另一个时区。但是,当我的本地时间是“美国/纽约”时,我想得到“美国/芝加哥”的时间分量值(小时、分钟等)。也就是说,如果我将偏移量设置为“America/Chicago”,则无论当前的本地时区如何,我都需要将时间设置为17。不使用moment.js或其他更好的方

我有一个日期时间选择器,它使用
getHours
getMinutes
,。。初始化该值。如果时区与用户位置一致,则效果良好,但我想考虑用户TZ不同于当前浏览器区域设置的情况。我可以使用
Intl.DateTimeFormat
将日期正确格式化为另一个时区。但是,当我的本地时间是“美国/纽约”时,我想得到“美国/芝加哥”的时间分量值(小时、分钟等)。也就是说,如果我将偏移量设置为“America/Chicago”,则无论当前的本地时区如何,我都需要将时间设置为17。不使用moment.js或其他更好的方法是否可以实现这一点


奇怪的是,当Intl对象方法实际上是一种语言时,它的第一个参数被称为“locale”。我也交替使用locale和language,可能也会混淆。谢谢你指出这一点。不确定为什么没有API来获取时间组件!最坏的情况可能总是创建所有可用时区及其偏移量的哈希图,并根据日期进行计算。UTC@charlietfl-使用“美国/芝加哥”等时区意味着可以观察到夏令时的变化,而只需设置时区偏移(这并不困难)意味着自己进行这样的调整。奇怪的是,Intl对象方法的第一个参数被称为“locale”,而实际上它是一种语言。我也交替使用locale和language,可能也会混淆。谢谢你指出这一点。不确定为什么没有API来获取时间组件!最坏的情况可能总是创建所有可用时区及其偏移量的哈希图,并根据日期进行计算。UTC@charlietfl-使用像“美国/芝加哥”这样的时区意味着可以观察到夏令时的变化,而仅仅设置时区偏移(这并不困难)意味着自己进行调整。
const baseUTCDate = new Date(Date.UTC(2017, 2, 1, 23, 0, 0));
function formatDate(date, timeZone, locale) {
  const options = { weekday: 'long', year: 'numeric', month: 'short',
    day: 'numeric', hour: 'numeric', minute: 'numeric', timeZoneName: 'short' };
  return new Intl.DateTimeFormat(locale, Object.assign(options, {timeZone: timeZone})).format(date);
}

console.log(formatDate(baseUTCDate, "America/New_York",  'en-US')) 
// Wednesday, Mar 1, 2017, 6:00 PM EST

console.log(formatDate(baseUTCDate, "America/Chicago",  'en-US'))
// Wednesday, Mar 1, 2017, 5:00 PM CST

console.log(baseUTCDate.getHours()) // 18 - local time zone is EST