Javascript日期-如何知道夏令时是否在给定时区生效
Javascript Date - how to know whether DST is in effect in a given timezone
首先,我不是在寻找DST是否在本地生效。
我正在运行一个Node进程,该进程的数据具有关联的时间戳。我需要将这些时间戳转换为指定时区的天/月/年,但我得到的只是时区的偏移量和夏令时偏移量。
我希望日期/时刻能更好地与时区配合使用。它们与UTC或本地时区配合得很好,但似乎你需要破解它才能获得其他东西。
我缺了什么吗?假设我可以确定DST是否有效,这会起作用吗:
var d = new Date(ts + timezone_offset - local_offset);
d.getMonth();
d.getDate();
其中,timezone_offset是时区的偏移量(标准偏移量或dst偏移量)?
如何确定夏令时是否有效?
首先,要认识到,如果只有偏移,则无法解决此问题。您必须具有时区标识符,例如"America/New_York"
。既然你在问题评论中说你确实有这个,那么你可以使用其中一个库来完成任务。
我之前发布了这个问题的另一个答案,推荐TimeZoneJS,但我现在收回这个答案——因为这个问题是专门关于DST的,而TimeZoneJS有错误,在DST转换附近报告值不正确。
相反,我现在建议使用moment.js和moment时区插件。一旦安装了这两个库(确保根据文档加载实际时区数据),代码就非常简单:
moment(timestamp).tz(timezone).isDST()
例如:
moment(1451624400000).tz('America/New_York').isDST(); // false
moment(1467345600000).tz('America/New_York').isDST(); // true
或者,如果您的时间戳已经是本地时间的字符串,则使用以下语法:
moment.tz('2016-01-01T00:00:00','America/New_York').isDST(); // false
moment.tz('2016-07-01T00:00:00','America/New_York').isDST(); // true
我有什么东西不见了吗?假设我可以确定DST是否有效,那么
timezone_offset
是请求的时区偏移量时,这是否有效?
请尝试始终使用UTC方法来获取日期的属性。这样你(服务器)的本地时区就不会影响任何计算:
var d = new Date(ts + timezone_offset);
d.getUTCMonth();
d.getUTCDate();
如何确定夏令时是否有效?
这很复杂。根据地区的不同,有很多不同的算法来确定夏令时的开始和结束-看看http://en.wikipedia.org/wiki/Daylight_saving_time_by_country例如
我不知道是否有任何库已经对这些进行了编码,甚至可能联系时区数据库以获取正确的信息。最后的办法是询问用户自己的时区详细信息。
moment.js(http://momentjs.com/)具有isDST函数。您可以使用moment(简单得多),或者检查它是如何实现的。
moment(your_date).isDST();
- 主干-不管怎样,检查事件以前是否绑定过
- 在将绑定应用于控制器之后,是否会发出Angular$scope事件
- 是否可以为React'打开React.js自动绑定;s类模型
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 我是否可以使用 Angular 将鼠标向上事件绑定到文档正文
- 测试字符串在 javascript 中是否具有时区
- 是否可以使用Angular2将自定义字符串轻松绑定到html元素中的id和for
- jquery remove函数是否也删除了敲除绑定
- backbonejs是否使用“;现场绑定”;比如canjs
- 使用JS检查用户是否在EST时区和设置的EST时间范围内
- 在Polymer中,双向绑定与属性表达式是否可能
- Backbone.js的Backbone.Modelbinding插件中是否有绑定的转换器参数
- 是否可以在extjs5中动态更新绑定
- 计算日期选择器+时间选择器是否在东部标准时区的过去
- Polymer v1.3.1数据绑定无论是否使用带有重复模板和json数组的iron ajax都无法工作
- 是否可以绑定javascript函数,使其本地上下文与“this”相同
- foreach绑定语法是否有效
- jQuery:通过检查绑定元素是否存在,可以获得更好的性能
- Knockout.js-foreach绑定-测试是否为最后一个元素
- 绑定父元素与直接绑定元素是否有优点或缺点