在没有时区转换的情况下使用 MomentJs 显示日期时间
Display datetime with MomentJs without timezone conversion
有时我最终会在网站的前端看到一个日期时间,该日期时间已经调整到特定时区,我希望无论用户的时区如何都按原样显示它。
例如,假设我有这个日期:
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:11PM 而不是 4:11PM。我怎样才能告诉 MomentJs 不调整用户的时区并按原样显示日期时间?
使用moment的utc()
方法去掉时区,全部显示为世界时
moment.utc('2015-01-22T16:11:36.36-07:00').format('l LT')
这将显示 UTC 时间,没有任何时区偏移。如果您想显示记录在 user/server 时区中的时间,您可以在构造时刻实例时解析时区信息,并让它使用记录在已解析字符串中的时区。
moment.parseZone('2015-01-22T16:11:36.36-07:00').format('l LT');
对于这两种方法中的任何一种,您都应该考虑以某种方式标记时间以反映时间对应的时区。如果不这样做,可能会给最终用户带来很多困惑。
我创建了一个扩展来显示日期时间,而不尝试调整到用户的时区:
(function (moment) {
moment.fn.nozone = function () {
var m1 = moment(this);
var offsetInMinutes = m1.utcOffset();
return m1.utc().add(offsetInMinutes, 'm');
};
}(moment));
这种方式很容易重用,即使在 javascript 模板中也是如此。
您可以使用utcOffset方法手动设置偏移量。
moment().utcOffset(0, true).format()
有时我最终会在网站的前端看到一个日期时间,该日期时间已经调整到特定时区,我希望无论用户的时区如何都按原样显示它。
例如,假设我有这个日期:
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:11PM 而不是 4:11PM。我怎样才能告诉 MomentJs 不调整用户的时区并按原样显示日期时间?
使用moment的utc()
方法去掉时区,全部显示为世界时
moment.utc('2015-01-22T16:11:36.36-07:00').format('l LT')
这将显示 UTC 时间,没有任何时区偏移。如果您想显示记录在 user/server 时区中的时间,您可以在构造时刻实例时解析时区信息,并让它使用记录在已解析字符串中的时区。
moment.parseZone('2015-01-22T16:11:36.36-07:00').format('l LT');
对于这两种方法中的任何一种,您都应该考虑以某种方式标记时间以反映时间对应的时区。如果不这样做,可能会给最终用户带来很多困惑。
我创建了一个扩展来显示日期时间,而不尝试调整到用户的时区:
(function (moment) {
moment.fn.nozone = function () {
var m1 = moment(this);
var offsetInMinutes = m1.utcOffset();
return m1.utc().add(offsetInMinutes, 'm');
};
}(moment));
这种方式很容易重用,即使在 javascript 模板中也是如此。
您可以使用utcOffset方法手动设置偏移量。
moment().utcOffset(0, true).format()