【问题标题】:JavaScript: Incorrect DatesJavaScript:不正确的日期
【发布时间】:2012-07-23 21:28:58
【问题描述】:

我有一个托管的 Web 应用程序,它根据每日工作日结束数据生成报告。由于服务器位于欧洲(设置为使用 UTC 时间),我位于亚洲 (UTC+5),而我的老板和同事位于美国 (UTC-5),我们似乎无法获得相同的日期。

例如,我这边的报告显示“2012 年 7 月 23 日”,而在美国显示“2012 年 7 月 22 日”。我使用 RDP 检查了服务器,它也显示“2012 年 7 月 23 日”。

我的应用程序中没有本地化。我不确定这是 ASP.NET、客户端 JavaScript 还是 MySql,它们根据请求的来源更改日期?有什么想法吗?

编辑 刚刚和我的老板核实了一下,他的浏览器中的源代码也显示“2012-07-23”。所以我想这可以缩小到 JavaScript 更改调用 new Date("2012-07-23") 的日期。

【问题讨论】:

    标签: c# javascript asp.net mysql vb.net


    【解决方案1】:

    如果您使用 ISO 日期时间,请确保最后指定时区,否则将计为本地时间。

    如果可能,在使用数据库和 ASP.NET 应用程序时,一切都使用 UTC 时间。

    GETUTCDATE() 
    
    DateTime.UTCNow() 
    

    如果您指定使用日期,请尽可能使用 ISO 日期以减少文化差异。

    【讨论】:

    • 谢谢,约翰。但是如果服务器全局设置为 UTC 时区,我还需要 UTCNow() 吗?此外,可能值得一提的是,在我的时区这里是 2012 年 7 月 24 日,但报告仍然在我的计算机和服务器的浏览器上显示 2012 年 7 月 23 日。这个问题似乎只影响我在美国(东部时间)的同事。无论是哪一天,日期都会为他们翻译为 -1。即使 UTC 和东部时间现在是同一天。
    • 使用 UTCNow() 总是值得的,因为从那时起机器不管它们在哪个时区,它们都使用相同的基地。
    【解决方案2】:

    我认为你可以责怪你的 JavaScript 代码。像你一样使用Date constructor (new Date("2012-07-23")) 和字符串调用Date.parse,如果未指定则使用本地时区。

    改用 ISO 时间戳或自纪元以来的毫秒数。

    当然,展示还有另一个作用。当您输出 utc 时间,解析为本地时区,作为本地时间,它将“正确”显示 utc。如果您将 utc-parsed 的 utc-string 输出为本地时间,它将正确显示本地时间。

    【讨论】:

    • 尝试使用毫秒,仍然没有帮助。这可能是一些浏览器端的行为吗?
    • 你是如何输出 Date 对象的? UTC 字符串,本地日期字符串?请也向我们展示该代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多