Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将JavaScript日期初始化为特定时区_Javascript_Timezone - Fatal编程技术网

如何将JavaScript日期初始化为特定时区

如何将JavaScript日期初始化为特定时区,javascript,timezone,Javascript,Timezone,我将特定时区中的日期时间作为字符串,并希望将其转换为本地时间。但是,我不知道如何在Date对象中设置时区 例如,我有2013年2月28日东部时间晚上7:00, var mydate = new Date(); mydate.setFullYear(2013); mydate.setMonth(02); mydate.setDate(28); mydate.setHours(7); mydate.setMinutes(00); 据我所知,我可以设置UTC时间或本地时间。但是,如何在另一个时区

我将特定时区中的日期时间作为字符串,并希望将其转换为本地时间。但是,我不知道如何在Date对象中设置时区

例如,我有
2013年2月28日东部时间晚上7:00,

var mydate = new Date();
mydate.setFullYear(2013);
mydate.setMonth(02);
mydate.setDate(28);
mydate.setHours(7);
mydate.setMinutes(00);  
据我所知,我可以设置UTC时间或本地时间。但是,如何在另一个时区设置时间

我尝试使用UTC的加/减偏移量,但我不知道如何抵消夏令时。我不确定我的方向是否正确

如何在javascript中将不同时区的时间转换为本地时间?

Background JavaScript的
Date
对象在内部跟踪UTC时间,但通常在运行它的计算机的本地时间接受输入并生成输出。它几乎没有在其他时区处理时间的设施

Date
对象的内部表示是一个数字,表示自
1970-01-01 00:00:00 UTC
以来经过的毫秒数,不考虑闰秒日期对象本身没有时区或字符串格式。当使用
日期
对象的各种功能时,计算机的本地时区将应用于内部表示。如果函数生成字符串,则可以考虑计算机的区域设置信息来确定如何生成该字符串。每个函数的详细信息各不相同,有些是特定于实现的

Date
对象只能对非本地时区执行以下操作:

  • 它可以解析包含来自任何时区的数字UTC偏移量的字符串。它使用它来调整正在解析的值,并存储UTC等效值。原始本地时间和偏移量不会保留在生成的
    Date
    对象中。例如:

    var d = new Date("2020-04-13T00:00:00.000+08:00");
    d.toISOString()  //=> "2020-04-12T16:00:00.000Z"
    d.valueOf()      //=> 1586707200000  (this is what is actually stored in the object)
    
    var d = new Date("2020-04-13T00:00:00.000+08:00");
    d.toLocaleString('en-US', { timeZone: 'America/New_York' })
    //=> "4/12/2020, 12:00:00 PM"
    // (midnight in China on Apring 13th is noon in New York on April 12th)
    
    new Date('Feb 28 2013 19:00:00 EST')
    
  • 在已经实现了(也称为“Intl”)的环境中,
    Date
    对象可以生成调整为给定时区标识符的特定于语言环境的字符串。这是通过
    时区
    选项来实现的,该选项用于
    toLocaleString
    及其变体。大多数实现将支持IANA时区标识符,如
    'America/NewYork'
    。例如:

    var d = new Date("2020-04-13T00:00:00.000+08:00");
    d.toISOString()  //=> "2020-04-12T16:00:00.000Z"
    d.valueOf()      //=> 1586707200000  (this is what is actually stored in the object)
    
    var d = new Date("2020-04-13T00:00:00.000+08:00");
    d.toLocaleString('en-US', { timeZone: 'America/New_York' })
    //=> "4/12/2020, 12:00:00 PM"
    // (midnight in China on Apring 13th is noon in New York on April 12th)
    
    new Date('Feb 28 2013 19:00:00 EST')
    
    大多数现代环境都支持全套IANA时区标识符()。但是,请记住,Intl需要支持的唯一标识符是
    “UTC”
    ,因此您应该仔细检查是否需要支持较旧的浏览器或非典型环境(例如,轻型物联网设备)

图书馆 有几个库可用于处理时区。尽管它们仍然不能使
Date
对象的行为有任何不同,但它们通常实现标准的IANA时区数据库,并提供在JavaScript中使用它的函数。现代库使用INTLAPI提供的时区数据,但较旧的库通常会有开销,尤其是在web浏览器中运行时,因为数据库可能会变得有点大。其中一些库还允许您有选择地减少数据集,或者根据支持的时区和/或可以使用的日期范围来减少数据集

以下是需要考虑的库:

基于国际语言的图书馆

新开发应该从这些实现中选择一种,这些实现依赖Intl API来获取时区数据:

  • (继任者)
  • (延长至)
非国际图书馆

这些库是可以维护的,但是它们要打包自己的时区数据,这可能相当大

  • (延长至)
  • *(延长至)
  • (适用于旧版1.x的扩展)
*虽然先前推荐使用矩和矩时区,但矩团队现在更喜欢用户选择Luxon进行新的开发

停止使用的库

这些图书馆已正式停办,不应再使用

未来的建议
其目的是提供一组新的标准对象,用于在JavaScript语言本身中处理日期和时间。这将包括对时区感知对象的支持。

您可以在
新日期()指定时区偏移量,例如:

var d = new Date("2020-04-13T00:00:00.000+08:00");
d.toISOString()  //=> "2020-04-12T16:00:00.000Z"
d.valueOf()      //=> 1586707200000  (this is what is actually stored in the object)
var d = new Date("2020-04-13T00:00:00.000+08:00");
d.toLocaleString('en-US', { timeZone: 'America/New_York' })
//=> "4/12/2020, 12:00:00 PM"
// (midnight in China on Apring 13th is noon in New York on April 12th)
new Date('Feb 28 2013 19:00:00 EST')

由于
Date
存储UTC时间(即
getTime
以UTC格式返回),javascript会将时间转换为UTC,当您调用
toString
之类的东西时,javascript会将UTC时间转换为浏览器的本地时区并返回本地时区的字符串,即如果我使用
UTC+8

> new Date('Feb 28 2013 19:00:00 GMT-0500').toString()
< "Fri Mar 01 2013 08:00:00 GMT+0800 (CST)"

(这
8
意味着将时间转换为我的本地时间-
UTC+8
,小时数是
8

我知道已经晚了3年,但也许它可以帮助其他人,因为除了时区库,我还没有找到类似的东西,这和他在这里的要求不完全一样

我在德国时区也做过类似的事情, 这有点复杂,因为夏令时和闰年有366天

当不同的时区在夏令时的不同时间发生变化时,可能需要对“IsDayLightSavingTimeingGermany”功能进行一些操作

无论如何,请查看此页面:

主要方法是: convertLocalDateToGermanTimezone 转换德国和德国时区

我已经花了很大的精力来记录它,所以它不会那么混乱。

试试看:,它通过本机提供的
Intl.DateTimeFormat
来解析预期的日期

我在我的一个项目中使用这种方法已经有几年了,但现在我决定将其发布为小型操作系统项目:)

我遇到了一个
dateWithTimeZone("America/Los_Angeles",2019,8,8,0,0,0)
//For mumbai time diffrence is 5.5 hrs so
// city_time_diff=5.5 (change according to your city) 

let timee= Date.now()
    timee=timee+(3600000*city_time_diff); //Add our city time (in msec) 
    let new_date=new Date(timee)
console.log("My city time is: ",new_date);