Mat*_*int 24 javascript timezone google-chrome internationalization ecmascript-intl
我最近发现JavaScript有一个新的扩展.这增加了一些功能,可以在Date对象中toLocaleString,toLocaleDateString和toLocaleTimeString功能. 参考这里.
我对timeZone支持IANA/Olson时区的选项特别感兴趣,例如America/New_York或Europe/London. 目前仅在Google Chrome中支持此功能.
以前的建议是,要使用除UTC或您自己的本地时区之外的任何其他时区的JavaScript,必须使用库.但现在,它似乎开始直接纳入浏览器.所以现在你可以这样做:
new Date().toLocaleString("en-US", {timeZone: "America/New_York"})
// output: "7/4/2013 5:15:45 PM"
Run Code Online (Sandbox Code Playgroud)
要么:
new Date().toLocaleString("en-NZ", {timeZone: "Pacific/Chatham",
timeZoneName: "long"})
// output: "7/5/2013 9:59:52 AM GMT+12:45"
Run Code Online (Sandbox Code Playgroud)
要么:
new Date().toLocaleString("en-GB", {timeZone: "Europe/London",
timeZoneName: "short"})
// output: "4/7/2013 22:18:57 United Kingdom Time"
// (strange time zone name, but ok)
Run Code Online (Sandbox Code Playgroud)
这是非常酷,但我有几个问题:
这主要关注输出,但我如何将其用于输入?有没有办法将构造函数中的时区传递给Date对象?我尝试了以下方法:
// parsing it with a date and time
new Date("2013-01-01 12:34:56 America/New_York")
// passing it as a named option
new Date(2013,0,1,12,34,56,{timeZone:"America/New_York"})
Run Code Online (Sandbox Code Playgroud)
都没有奏效.我在规格中找不到任何东西,所以我认为这还不存在,但请告诉我,如果我错了.
由ECMAScript 5规范中的缺陷创建的本文中描述的问题仍会影响输出,即使正确的数据在TZDB中也是如此.旧的和新的实现是如何共存的呢?人们会认为这将是旧的方式,或所有新的方式.例如,我的计算机时区设置为美国东部时间:
new Date(2004,10,7,0,0).toLocaleString("en-US",{timeZone:"America/New_York"})
Run Code Online (Sandbox Code Playgroud)
回报"11/6/2004 11:00:00 PM".它应该返回午夜,因为我从午夜开始,我的本地时区与输出时区匹配.但由于ES5问题,它将提供的输入日期置于错误的UTC点.
我可以期待,当IANA发布TZDB更新时,Google会推送包含更改的Chrome更新吗?
Esa*_*ija 21
有关于API相当广泛的写了这里
这是新标准的一部分吗?也许埋在ECMAScript 6的某个地方?或者它只是Chrome的自定义内容?
是的,这些是ECMAScript国际化API的一部分.它与ECMAScript分开实现,但实现ECMAScript Internationalization API的要求是首先要正确实现ECMAScript 5.1
为何只使用Google Chrome?它在其他地方是否受支持?是否有计划在其他任何地方支持它?
近年来,谷歌Chrome大多是首先实现新功能.Mozilla更保守,仍然在讨论是否实现元素的download属性a.它现在也可以在IE11 Beta和Opera中使用.它将在Firefox 25中提供.
我检查了使用Chrome的JavaScript运行时的node.js,但它在那里不起作用.为什么不?
node.js只使用相同的引擎,这是一个与谷歌Chrome浏览器不同的项目.引擎只是实现了Ecmascript 5.1.这是一个扩展node.js必须立即单独实现.它将在Q3中在Q3中可用,所以可能稍后您可以在node.js中使用它.
这主要关注输出,但我如何将其用于输入?有没有办法将构造函数中的时区传递给Date对象?我尝试了以下方法:
在规范中输入日期没有任何意义.我个人无法看到这将如何有用,如果你没有发送UTC时间戳,你做错了,因为"2013-01-01 12:34:56 America/New_York"在从DST到标准时间的过渡期间,这样的事情是不明确的.
由ECMAScript 5规范中的缺陷创建的本文中描述的问题仍会影响输出,即使正确的数据在TZDB中也是如此.
这是输入问题,而不是输出.同样,使用您无法影响或检测的本地时区构建日期是错误的.使用timestamp构造函数重载或Date.UTC.
我可以期待,当IANA发布TZDB更新时,Google会推送包含更改的Chrome更新吗?
规范中没有任何内容,但我认为期望规则不会太落后是合理的.
这是新标准的一部分吗?也许埋在ECMAScript 6的某个地方?或者它只是Chrome的自定义内容?
实际上它是新的ECMA-402标准的一部分.该标准很难阅读,但有一个友好的介绍.
为何只使用Google Chrome?它在其他地方是否受支持?是否有计划在其他任何地方支持它?
MDN有一个支持浏览器的列表.根据Bug 853301,它将在Firefox 25中提供.
我检查了使用Chrome的JavaScript运行时的node.js,但它在那里不起作用.为什么不?
可能的原因很多; 它不符合当前的代码库,或者它会使node.js更大更慢(Mozilla之前的bug跟踪器条目表明时区数据增加了Firefox的下载量10%,并导致I/O在浏览器启动期间大幅增加.
时区数据是否可以通过我列出的功能以外的任何其他方式访问?如果仅
在格式化字符串时可用,则根据结果进行任何计算可能很困难.
似乎它不可用.此外,Intl API入门说明只需要支持UTC和本地时区.
这主要关注输出,但我如何将其用于输入?有没有办法将构造函数中的时区传递给Date对象?我尝试了以下方法:
Intl API仅说明日期/时间格式,字符串排序规则和数字格式.日期时间格式不仅支持格里高利历,还支持许多其他日历,月球,阴阳等.
由ECMAScript 5规范中的缺陷创建的本文中描述的问题仍会影响输出,即使正确的数据在TZDB中也是如此.旧的和新的实现是如何共存的呢?人们会认为这将是旧的方式,或所有新的方式.例如,我的计算机时区设置为美国东部时间:
新日期(2004,10,7,0,0).toLocaleString("en-US",{timeZone:"America/New_York"})
返回"11/6/2004 11:00:00 PM".它应该在午夜返回,因为我在午夜开始并且>我的本地时区与输出时区匹配.但由于ES5问题,它将提供的输入日期置于>错误的UTC点.
原因是ES5要求使用当前的DST和偏移计算新日期的输入,即美国/纽约但使用EDT时区,即使11月6日不在EDT中.显然,因为这是如此指定,那么它不能改变.但是,由于Chrome使用TZDB进行从简单的UTC时间点到美国/纽约tz的转换,因此它确实将时间视为在EST中.
我可以期待,当IANA发布TZDB更新时,Google会推送包含更改的Chrome更新吗?
我是这么认为的
| 归档时间: |
|
| 查看次数: |
24421 次 |
| 最近记录: |