你如何检查日期是否是 UTC 在 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,但我不知道怎么做。

所有toString,toUTCString和类似的方法对于输入(非UTC)和输出(UTC)日期似乎是相同的。

只有 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, …)使用用户时区根据单个值构造时间戳。如果你希望这在你的用户社区中是相同的,你就完蛋了。即使不使用时间值而只使用日期,也可能导致奇怪的偏差错误。
    • 您可以使用setYearsetMonth、...和getYeargetMonth...根据用户时区在现有日期上设置/获取单个值的方法。这适用于来自用户的输入/输出。
    • getTimezoneOffset()允许您查询将用于所有这些的时区
  • new Date(timestring)Date.parse是不可信的。如果您向他们提供没有明确时区表示的字符串,则 UA 可以随机操作。如果您想以正确的格式输入字符串,您将能够找到不接受它的浏览器(尤其是旧 IE)。
  • Date.UTC(year, month, …)允许您根据 UTC 时区中的值构造时间戳。这对于 UTC 字符串的输入/输出非常方便。
    • 每个 get/set 方法都有一个 UTC 等效项,您也可以将其用于这些事情。

您现在可以看到,获取用户时区值并像使用 UTC 一样使用它们的方法一定是有缺陷的。这意味着dtutcTime具有错误的值,尽管使用错误的输出方法可能会使其看起来正确。

  • 获取时区偏移量

    语法: object.getTimezoneOffset( ) 此方法返回本地时间和格林威治之间的分钟差平均时间。正如您可能认为的那样,此值不是常量,因为使用夏令时的做法。

var myDate = new Date;
var myUTCDate = new Date(myDate - myDate.getTimezoneOffset() * 60000);
alert(myUTCDate);

注意:60000是一分钟内的毫秒数;

相关内容

  • 没有找到相关文章

最新更新