基于MomentJs中区域的日期格式

时间:2019-08-09 07:38:41

标签: javascript momentjs

问题
如果用户在伦敦或某个地方,则日期格式应为 DD / MM / YYYY
可以使用矩吗?可以根据用户的时区格式化日期吗?

注意::我知道我们可以根据用户的语言环境来做到这一点,但是可以使用时区吗?我朝正确的方向前进吗?

.format('L')会将其格式化为“ DD / MM / YYYY”,但它基于语言环境而不是时区。

3 个答案:

答案 0 :(得分:2)

您可以为此使用moment timezone

然后您将可以执行以下操作-

var moment = require('moment-timezone');
moment().tz("America/Los_Angeles").format();

要获取特定格式的日期,请按以下格式在format()中指定日期-

moment().tz("America/Los_Angeles").format('DD/MM/YYYY');

答案 1 :(得分:1)

格式不会自动与时区关联,而是与语言环境关联。

因此,如果要根据时区确定格式,请使用getTimezoneOffset获取时区,并通过预定义的常量运行结果以获取要应用于时区的格式。 / p>

const zoneFormats = {
   1: "dd/mm/yyyy"
   2: "mm/dd/yyyy"
}

然后根据通过常量选择的格式化程序来格式化时间。

var format = zoneFormats[new Date().getTimezoneOffset()];
moment().format(format || 'yyyy-mm-dd');

答案 2 :(得分:1)

要回答第二个问题,我不确定您的方向是否正确。国家/地区可以在相同的时区,但日期格式不同。蒙特利尔与纽约(东部夏令时)处于同一时区,但是在加拿大,它使用 YYYY-MM-DD 日期格式。使用moment timezone可能会产生错误的结果,例如:

var montreal = moment.tz("2014-06-01 12:00", "America/Montreal");
var newYork = moment.tz("2014-06-01 12:00", "America/New_York");
console.log(montreal.format('L')); // This should be '2014-06-01' but produces '06/01/2014'
console.log(newYork.format('L'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data-10-year-range.min.js"></script>