使用moment.js格式化datetime以显示时区



使用moment.js显示时区时出现问题。

我试过用这个代码:

var result = moment(someDate).format("MM/DD/YYYY HH:mm A Z");

,我得到返回,例如:08/05/2015 06:18 PM +02:00,这很好,但我希望我的输出像08/05/2015 06:18 PM WEDT或类似的东西,与时区的缩写。

尝试使用这段代码,但我得到空的时区结束:

var result = moment(someDate).format("MM/DD/YYYY HH:mm A z"); 

var result = moment(someDate).format("MM/DD/YYYY HH:mm A zz");

更新

所以就像@Matt Johnson建议的那样,我使用moment-timezone-with-data.js和tzdetect.js来显示时区:

var tzName = tzdetect.matches()[0];
var result = moment.tz(myDate, tzName).format("MM/DD/YYYY h:mm A zz");

如文档所述:

注意:从1.6.0开始,z/zz格式标记已被弃用。点击这里了解更多。

一般的问题是时区缩写不能通过一致的API从浏览器中获得。为了提供它们,必须有一个外部数据源。

你可能想看看使用moment-timezone插件。它提供时区信息,包括缩写。您必须知道正在使用的特定时区。例如:

moment.tz("2015-08-05T00:00:00+01:00", "Europe/London").format("MM/DD/YYYY hh:mm A z");
// "08/05/2015 12:00 AM BST"

此外,您不应该将HH(24小时时钟的小时)与A(12小时am/pm指示器)混合。使用hhA,或者使用HHA

要将UTC日期时间转换为用户当前的时区,解决方案是使用moment-timezone而不是moment。(我们所有的日期在DB中都是UTC)。其他时区也不应该是问题。

const timeZoneString = Intl.DateTimeFormat().resolvedOptions().timeZone
const getFormattedDateTimeWithTZ = (date) => {
      return moment((date)).tz(timeZoneString).format('ddd, MMM DD YYYY, h:mm A zz')
}
// outputs Tue, Mar 08 2022, 4:00 PM PKT
getFormattedDateTimeWithTZ('2022-03-08T03:00:00.000-08:00')

相关内容

  • 没有找到相关文章

最新更新