Javascript 如何根据我的时区以特定格式获取日期

Javascript 如何根据我的时区以特定格式获取日期,javascript,node.js,date,timezone,Javascript,Node.js,Date,Timezone,我需要格式化JavaScript日期对象。 它应显示以色列日期,格式为:yyyy/mm/dd 我试过这个- const locale = 'he-IL'; const dateOptions = {timeZone:'Asia/Jerusalem',year: 'numeric', month: '2-digit', day: '2-digit'}; console.log( new Date(record.value).toLocaleDateString(locale, dateOptio

我需要格式化JavaScript日期对象。 它应显示以色列日期,格式为:yyyy/mm/dd

我试过这个-

const locale = 'he-IL';
const dateOptions =  {timeZone:'Asia/Jerusalem',year: 'numeric', month: '2-digit', day: '2-digit'};
console.log( new Date(record.value).toLocaleDateString(locale, dateOptions) )
我是从本地计算机上得到的-

=> 2020-06-22
以及来自亚马逊云上托管的服务器 :


我尝试使用其他语言环境,但结果有所不同-可能是根据服务器的语言环境而定。

ECMAScript日期对象只是一个时间值,是从1970-01-01T00:00:00Z开始的以毫秒为单位的偏移量,范围约为±285000年,因此它们实际上是UTC

时间值是在基于传递给构造函数的值创建日期实例时计算的。如果未传递任何值,则根据系统时钟和时区设置计算当前时间值。这是日期对象具有的唯一数据值。日期实例的所有其他数据值都是从时间值(例如getMonth、getHours、toString等,包括它们的UTC等效值)计算出来的,或者是从系统中检索出来的(例如getTimezoneOffset)

所以不能指定日期的时区,因为它没有时区。当前系统时区设置在使用非UTC方法时使用,否则也会被忽略

如果要获取特定位置(如以色列)的时间戳,可以将系统设置设置为合适的位置,并使用非UTC方法。或者,您可以使用实例的时区选项,使用生成一些适当的值,然后根据需要格式化它们

唯一棘手的部分是从formatToParts返回的数组中获取值,例如,以下使用reduce创建一个在格式化时更方便使用的parts对象:

let parts=new Intl.DateTimeFormat('en'{
年份:'数字',
月份:“2位”,
日期:“两位数”,
时区:'亚洲/耶路撒冷'})
.formatToParts(新日期())
.减少((附件,零件)=>{
acc[零件类型]=零件值;
返回acc;
},Object.create(null));
让timeStamp=`parts.year}/${parts.month}/${parts.day}`;

日志(时间戳)ToLocalString的输出未标准化,我得到“22.06.2020”。考虑使用输出来生成字符串。您可能会发现服务器不支持toLocaleString选项,因此会忽略它们。谢谢。第一种选择有效!由于每台服务器的格式不同,第二种方法并不总是有效(请参见问题)。
new Date().toLocaleDateString('en-CA',{timeZone:'Asia/耶路撒冷')).replace(/\D/g,'/')
为我提供了
'6/24/2020'
@user2503775 yes,如答案最后一句所述,并通过示例演示。不正确的格式是故意的。
=> 06/22/2020