[英]How do you check whether a date is UTC in Javascript?
我已经读过这个问题: 你如何将JavaScript日期转换为UTC?
基于此,我在dateTools模块中实现了这个转换,如下所示:
[更新]
var dt, utcTime;
dt = new Date();
utcTime = new Date(Date.UTC(dt.getFullYear(),
dt.getMonth(),
dt.getDate(),
dt.getHours(),
dt.getMinutes(),
dt.getSeconds(),
dt.getMilliseconds()));
现在我想写单元测试。 我的想法是检查结果是否实际上是UTC,但我不知道如何。
对于输入(非UTC)和输出(UTC)日期,所有toString,toUTCString和类似方法似乎都是相同的。
只有getTime方法的结果不同。
有没有办法检查javascript中的日期是UTC? 如果没有,是否有更好的想法进行单元测试?
提供更多背景信息:
只将它转换为UTC字符串没有用,因为在下一步中,日期将被发送到Asp.net服务,因此转换为如下字符串:
'/Date([time])/'
用这个代码
var aspDate = '/Date(' + date.getTime() + ')/';
var aspDate = '/Date(' + date.getTime() + ')/';
这将输出内部UNIX epoch
值(UTC) ,表示时间戳。 您可以使用各种toString
方法来获取该时间戳的更详细的字符串表示形式:
.toString()
使用用户时区,结果类似于"Fri Jan 25 2013 15:20:14 GMT+0100"
(对我而言,至少,你可能生活在不同的时区) .toUTCString()
使用UTC,结果看起来像"Fri, 25 Jan 2013 14:20:15 GMT"
.toISOString()
使用UTC,并根据ISO格式化日期字符串: "2013-01-25T14:20:20.061Z"
那么我们如何构建我们想要的时间价值呢?
new Date()
或Date.now()
导致当前日期时间。 无论用户的时区是什么,时间戳都只是当前时刻。 new Date(year, month, …)
使用用户时区从单个值构造时间戳。 如果您希望在您的用户社区中使用它,那么您就会被搞砸了。 即使不使用时间值但只使用日期,它也可能导致奇怪的逐个错误 。
setYear
, setMonth
,...和getYear
, getMonth
...方法根据用户时区在现有日期设置/获取单个值。 这适用于从/输出到用户的输入。 getTimezoneOffset()
允许您查询将用于所有这些的时区 new Date(timestring)
和Date.parse
不可信任。 如果您为它们提供没有明确时区表示的字符串,则UA可以随机操作。 如果你想用适当的格式提供一个字符串,你将能够找到一个不接受它的浏览器(特别是旧的IE)。 Date.UTC(year, month, …)
允许您根据UTC时区中的值构造时间戳。 这对于UTC字符串的输入/输出非常方便。
您现在可以看到,获取用户时区值并将其用作UTC时的方法必须存在缺陷。 这意味着dt
或utcTime
具有错误的值,尽管使用错误的输出方法可能会使其显示正确。
使用getTimezoneOffset
语法:object.getTimezoneOffset()此方法返回本地时间与格林威治标准时间之间的差异。 由于使用夏令时的做法,您可能认为此值不是常量。
即
var myDate = new Date;
var myUTCDate = new Date(myDate - myDate.getTimezoneOffset() * 60000);
alert(myUTCDate);
注意:60000是一分钟内的毫秒数;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.