使用MomentJs显示日期时间,而无需进行时区转换

Display datetime with MomentJs without timezone conversion

本文关键字:进行时区 转换 MomentJs 显示 日期 时间 使用      更新时间:2023-09-26

有时,我最终会在网站的前端显示一个日期时间,该日期时间已经调整为特定的时区,我希望无论用户的时区如何,它都完全按原样显示。

例如,假设我有这个日期:

2015-01-22T16:11:36.36-07:00

-07:00 表示它是山区时间,MomentJs 知道这一点,并且会自动为其他时区的用户进行调整。 例如,假设我使用以下代码显示日期时间:

moment('2015-01-22T16:11:36.36-07:00').format('l LT')

中部时间 (-06:00) 的用户将看到时间是下午 5:11,而不是下午 4:11。 如何告诉 MomentJs 不调整用户的时区并按原样显示日期时间?

使用 moment 的utc()方法删除时区并以世界时间显示所有内容。

moment.utc('2015-01-22T16:11:36.36-07:00').format('l LT')

这将以 UTC 格式显示时间,没有任何时区偏移量。如果要显示以用户/服务器时区记录的时间,则可以在构造时刻实例时解析区域信息,并使其使用解析字符串中记录的时区。

moment.parseZone('2015-01-22T16:11:36.36-07:00').format('l LT');

使用这两种方法中的任何一种,您都应该考虑以某种方式标记时间,以反映时间对应的时区。如果不这样做,可能会给最终用户带来很多困惑。

可以使用 utcOffset 方法手动设置偏移量。

moment().utcOffset(0, true).format()

我创建了一个扩展来显示日期时间,而无需尝试调整到用户的时区:

(function (moment) {
    moment.fn.nozone = function () {
        var m1 = moment(this);
        var offsetInMinutes = m1.utcOffset();
        return m1.utc().add(offsetInMinutes, 'm');
    };
}(moment));

这样,即使在 JavaScript 模板中,它也很容易重用。