问题
如果用户在伦敦或某个地方,则日期格式应为 DD / MM / YYYY
可以使用矩吗?可以根据用户的时区格式化日期吗?
注意::我知道我们可以根据用户的语言环境来做到这一点,但是可以使用时区吗?我朝正确的方向前进吗?
.format('L')会将其格式化为“ DD / MM / YYYY”,但它基于语言环境而不是时区。
答案 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>