纠结了好几天,今天终于找到了解决办法,赶快分享一下:
在夏令时时区会出现的情况:
1、非夏令时:
2、夏令时:
3、Code:
同样是两个时间相减,为什么夏令时和非夏令时不一样的,这实际上就是夏令时的规则,大概在每年的3月底,夏令时会自动将系统时钟跳快一小时,具体操作就是当时钟走到1:59时,下一刻是3:00;如果是夏令时改成非夏令时一般是在11月初,当时钟走到1:59时,下一刻是1:00。
上面我计算的两个时间实际上是穿过夏令时的,如果你仔细计算一下(181-180,95833333..)*24,结果正好是一小时,也就是夏令时导致计算的时候少了一小时,这个就是我程序出错的根本原因,那么找到原因了,下一步就是找解决方案。
4、解决方案:
/// <summary>/// Fixed TimeZone issue: Transfer the sDate1 and sDate2 to UTC, then minus./// </summary>this.dateDiff = function (sDate1, sDate2){//var days = parseInt((sDate1 - sDate2) / 1000 / 60 / 60 / 24);var d1 = Date.FullYear(), Month(), Date(), Hours(), Minutes(), Seconds(), Milliseconds());var d2 = Date.FullYear(), Month(), Date(), Hours(), Minutes(), Seconds(), Milliseconds());var days = (d1 - d2) / 1000 / 60 / 60 / 24;return days;}
做时间相减的时候,找到当前时间对应的UTC[也叫GMT,格林威治]时间,然后再用两个UTC时间相减,这样得出来的结果就不会随着时区的改变而变化了。
如果你有好的方法或者见解,欢迎与我讨论分享。
本文发布于:2024-01-27 20:50:41,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17063598372559.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |