【问题标题】:Convert time of a known timezone to local timezone in moment js在时刻js将已知时区的时间转换为本地时区
【发布时间】:2019-03-03 17:08:06
【问题描述】:

我正在尝试使用 Moment.js 将时间(单独时间)从已知时区转换为我的本地时区。

我编写了以下函数,我得到invalidDate 作为输出。

const convertToLocalTime = (time, tz) => {

  const t = moment.tz(time, tz)
  const localTime = t.local()
}
  • time 只是时间;没有任何日期,例如:10:06 am 和,
  • tz 是一个时区字符串,例如:Europe/Berlin

我做错了什么?

【问题讨论】:

  • 对不起,如果我误读了这个,但你为什么要通过两次?听起来您想传递一个 from 时间和一个时区并返回本地区域的新时间。 to 是干什么用的?
  • 是的,我经过两次。那是故意的。变量名称可能会产生误导 - 我有两次,从(如开始时间)和到(如结束时间)已知 tz,我想将它们都转换为本地时间。
  • 我更新了问题以使其清楚。
  • 我认为这里的一般问题是时刻适用于日期,而不是时间。如果您设法将时间转换为日期而忽略日期部分,这可能是一个潜在的解决方案。

标签: javascript momentjs moment-timezone


【解决方案1】:

Parsing in Zone:

moment.tz 构造函数采用与矩构造函数相同的所有参数,但将最后一个参数用作time zone identifier

由于您的输入 (10:06 am) 不是 ISO 8601/RFC 2822 可识别的格式(请参阅 moment(String) 文档),您必须传递格式参数,如 moment(String, String) 所示。

这是一个现场样本:

const convertToLocalTime = (time, tz) => {
  const t = moment.tz(time, 'hh:mm a', tz)
  const localTime = t.local()
  return localTime;
}

const res = convertToLocalTime("10:06 am", 'Europe/Berlin');
console.log( res.format('hh:mm a') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data-2012-2022.min.js"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-11
    • 2012-08-29
    • 2018-11-28
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多