【问题标题】:Get Day time according to the timezone of user根据用户的时区获取Day时间
【发布时间】:2020-05-24 19:42:03
【问题描述】:

我有一个 Firebase 云功能,可以向我的应用发送推送通知。我只想在白天发送通知。 我正在使用 moment-timezone 并已通过 npm install 安装了 moment-timezone: "^0.5.27" (moment ^2.24.0 也已安装)

我正在尝试使用以下方法将当前日期转换为不同的时区:

moment.tz(date, 'CST').format();

它会抛出这个错误:

Moment Timezone 没有 CST 的数据。见http://momentjs.com/timezone/docs/#/data-loading/

在他们的时区文档中提到

在 Node.js 中,所有数据都是预加载的。加载数据不需要额外的代码。

那么为什么会出现这条消息?有什么方法可以根据动态传递的时区获取当前时间?

【问题讨论】:

  • 您可以在没有库的情况下使用 Date.prototype.toLocaleString 执行此操作,例如new Date().toLocaleString('en-gb',{timeZone:'America/Chicago', timeZoneName:'long'}).

标签: javascript node.js date timezone google-cloud-functions


【解决方案1】:

您遇到的问题是由于您赋予 Timezone 方法的值。

如果您正在寻找中部标准时间,请使用 'America/Chicago' 而不是 CST

取自 Moment.js documentation:

另请注意,这些缩写并不是全球唯一的。下面,你 可以看到美国中部标准时间和中国 标准时间具有相同的缩写。

moment.tz('2016-01-01', '美国/芝加哥').format('z'); // CST

【讨论】:

  • 我只有这些缩写和 UTC 偏移量由移动应用程序存储在数据库中,我动态获取这些值并检查它是否是白天。有没有其他方法可以通过缩写或 UTC 偏移量来实现这一点。
  • @JitenderaKumar - 那么我建议您将这些缩写更改为 moment.js 可以识别的内容。意思是,不要将 CST 保存在数据库中,而是保存 America/Chicago。 如果我的回答对你有帮助,请注明。
  • 另请注意,并非特定时区中的所有地点都使用相同的偏移规则(例如历史变化和夏令时),因此使用美国/芝加哥等代表性地点。
猜你喜欢
  • 1970-01-01
  • 2015-01-16
  • 2011-10-23
  • 1970-01-01
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多