Javascript 基于MomentJs中区域的日期格式

Javascript 基于MomentJs中区域的日期格式,javascript,momentjs,Javascript,Momentjs,问题 如果用户在伦敦或某个地方,则日期格式应为DD/MM/YYYY 有可能利用这个时刻吗?矩可以根据用户的时区设置日期格式吗 注意:我知道我们可以根据用户的区域设置来做,但是可以使用时区吗?我走的方向对吗 .format'L'将在DD/MM/YYYY中对其进行格式化,但它基于区域设置,而不是时区。您可以使用此软件包 然后,您将能够执行以下操作- var moment = require('moment-timezone'); moment().tz("America/Los_Angeles").

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

注意:我知道我们可以根据用户的区域设置来做,但是可以使用时区吗?我走的方向对吗

.format'L'将在DD/MM/YYYY中对其进行格式化,但它基于区域设置,而不是时区。

您可以使用此软件包

然后,您将能够执行以下操作-

var moment = require('moment-timezone');
moment().tz("America/Los_Angeles").format();
要以特定格式获取日期,请按以下格式指定日期-

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

格式不会自动与时区关联,而是与区域设置关联

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

const zoneFormats = {
   1: "dd/mm/yyyy"
   2: "mm/dd/yyyy"
}
然后根据通过常数选择的格式化程序格式化时间

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

回答你的第二个问题,我不确定你的方向是否正确。国家可以位于同一时区,但具有不同的日期格式。蒙特利尔与纽约东部夏令时位于同一时区,但由于它位于加拿大,所以使用YYYY-MM-DD日期格式。使用会产生不正确的结果,例如:

var montreal=moment.tz2014-06-01 12:00,美国/蒙特利尔; var newYork=moment.tz2014-06-01 12:00,美国/纽约; console.logmontreal.format'L';//这应该是“2014-06-01”,但会产生“06/01/2014” console.lognewYork.format'L';
在这种情况下,它将日期格式设置为YYYY-MM-DD HH:MM:SSZYou甚至可以使用此软件包来猜测用户的时区,这并非100%准确,但可能足以满足您的局部使用情况:@MonikaMangal谢谢,但日期格式应基于时区。例如,如果用户在伦敦/法国,则格式应为DD/MM/YYYY,如果用户在印度,则格式应为MM/DD/YYYY。我们无法硬编码格式。使用格式它将在YYYY-MM-DD HH:MM:SSZ中格式化日期,但我希望它在DD/MM/YYYY中。。如果我们以格式传递L,那么它将以DD/MM/YYYY格式格式化日期,但它在区域设置上工作,而不是在时区上工作,因为您知道该区域设置!=您只需将时区映射到区域设置,没有内置的即时功能。问题是区域设置不是时区。如果不使用其他语言环境,您将始终看到MM/DD/YYYY,因为默认情况下,Moment.js带有英语-美国语言环境字符串。如果您需要其他区域设置,可以将它们加载到Moment.js中,以供以后参考。在您的示例中,您必须使用en ca或fr ca来查看蒙特利尔的结果。对,是的,我明白您的意思。您可以从诸如America/Monteral或Europe/London之类的字符串派生正确的时区,但这始终不足以派生该位置的日期格式。