vke*_*man 45 javascript timezone datetimepicker timezone-offset momentjs
我注意到对于我们东部时区("America/New_York"),时区偏移量为"-05:00" Date.getTimezoneOffset()返回正数300.我希望在几分钟内偏移量为负值来自Utc的West,以及Utc以东地区的积极,但显然它是"翻转".这个决定背后的原因是什么?
http://momentjs.com/遵循相同的规则并返回...
moment.parseZone("01/13/2014 3:38:00 PM +01:00").zone() // == -60
moment.parseZone("01/13/2014 3:38:00 PM -01:00").zone() // == 60
Run Code Online (Sandbox Code Playgroud)
同时,DateTimePicker http://trentrichardson.com/examples/timepicker/在设置其初始"timezone"参数时不会翻转数字.这是错的吗?
rai*_*7ow 71
因为这是它的定义方式.引用文档(MDN):
时区偏移是UTC与本地时间之间的差异(以分钟为单位).请注意,这意味着如果本地时区落后于UTC,则偏移量为正,如果前置,则偏移量为负.
Mat*_*int 15
在raina77ow上详细阐述了一个完全可以接受的答案......
首先,要明白的是,这里所涉及的主要标准是ISO 8601和RFC 822(及其亲属733,1123和2822)的ANSI X3.51-1975衍生,这是所有(的部分).
所有这些标准都使用正值为UTC/GMT以东的惯例,负值为UTC/GMT以西.
我所知道的唯一标准就是POSIX(参见时区标签wiki的POSIX部分,以及本文),从而解释为什么向后兼容的Olson时区如"Etc/GMT + 5"有他们的标志倒置.(当然可能还有其他用法,我只是没有意识到它们.)
信不信由你,JavaScript做到了两种方式.当用作字符串(在RFC 822或ISO 8601语法中)时,它使用小时和分钟以及UTC 以东的正偏移.但是当getTimezoneOffset()在Date对象上调用方法时,它返回整数分钟,这些分钟是UTC的正向西.
人们只能推测出这种不一致的原因.在ECMAScript的规范是充满了这样的问题.也许是因为当您在ISO 8601或RFC 822字符串中看到偏移量时,已经应用了该偏移量.但是当你调用getTimezoneOffset()它时,应用偏移量将其恢复为UTC.
例如,2014-01-01T00:00:00-05:00等于2014-01-01T05:00:00Z.所以getTimezoneOffset()会回来300.如果您将300分钟添加到原始值,则返回UTC.
它是同一枚硬币的两面.看到?
至于具体控制是否不正确,我不确定.我不熟悉那个特定的控件.我在他们的文档中看到-0400等于-240的例子,其中一个可能会被反转,但是再次向用户提供像-240这样的值有点奇怪.实际上,您不应该向用户公开偏移量(恕我直言).你最好使用时区选择器控件,比如这个或者这个.
| 归档时间: |
|
| 查看次数: |
25262 次 |
| 最近记录: |