【问题标题】:JS Date function does not work in SafariJS 日期功能在 Safari 中不起作用
【发布时间】:2012-12-23 09:54:57
【问题描述】:

我正在制作一个 Rails 应用程序并通过 ajax 调用从服务器获取日期。从服务器收到的日期是2012-12-23 18:44:00 UTC。当我这样做 newYear = new Date(data)(其中数据是接收日期)时,我在 Chrome 中得到 Sun Dec 23 2012 19:44:00 GMT+0100 (CET),在 Safari 中得到 Invalid Date

(我实际上想从服务器获取日期并将其转换为毫秒,以便与今天的日期进行比较。)

所以它在 Chrome 中可以正常工作,但在 Safari 中却不行。

我该如何解决这个问题?

.js 文件:

$ ->
    $(document).ready ->
        $.post "/get_time", (data) ->
            newYear = new Date(data)
            today = new Date().getTime()
            newYearMS = newYear.getTime()
            $("#ggg").html newYearMS
            if newYearMS < today
                $("body").css "background-image", "url('/assets/HypePlay.png')"
            else
                $("#play_button").hide()
                $("#counter").countdown
                    until: newYear
                    format: "HMS"
                    expiryUrl: "/"
                    $('#hhh').html data

来自控制器的return_time函数:

def return_time
    date = Item.where(:end => Time.zone.now .. '2040-12-28 08:08:00').order("launch ASC").limit(1).first.launch
    render text: date
  end

【问题讨论】:

标签: javascript ruby-on-rails-3 date


【解决方案1】:

您应该从服务器返回以毫秒为单位的时间,然后在new Date() 中使用它,而不是返回日期字符串。

date object 确实接受许多不同的格式,但我可以想象 UTC 部分在 Safari 中会破坏它。

【讨论】:

  • +1 你能做的最好的事情就是在传递日期时将 UTC 打包为毫秒。然而,我实际上很惊讶日期对象在从 2012 年 12 月 21 日之类的事物中提取日期方面实际上可以处理多少
  • 谢谢,最好从服务器返回 MS。你知道如何在我的控制器中将日期转换为 MS 吗?我在我的问题中添加了控制器功能。
  • 很抱歉不是红宝石专家。在 php 中有 strtotime 函数:php.net/manual/en/function.strtotime.php
  • 有效! :) 所以我将日期从控制器发送回 MS 中的站点,如下所示:ms = (date.to_f.*1000).to_i
【解决方案2】:

我建议生成毫秒或 ISO-8601;它们可以传递给所有主流浏览器的日期构造函数:

new Date("2012-12-20T18:15Z")
Thu Dec 20 2012 13:15:00 GMT-0500 (EST)

如果你真的不能改变来自服务器的格式,那么你需要使用类似 moment.js 的东西:

moment.utc("2012-12-23 18:44:00 UTC", "YYYY-MM-DD HH:mm:ss")

【讨论】:

    【解决方案3】:

    我同意@Horen,以及他关于从服务器传回以毫秒为单位的时间的建议。

    如果您对自己拥有的东西束手无策,并且需要使用格式,则可能需要查看Moment.js。它还将帮助您执行日期/时间验证。

    【讨论】:

    • 或者您可以学习日期构造函数的工作原理,而不是在您的代码中添加一个 40.3KB 的源库并了解它是如何工作的。
    • @ErikReppen,5KB 缩小。
    • 这就是我说来源的原因。对于一个小问题,它仍然是一堆代码。
    • @ErikReppen,是的,但我认为 OP 可能会发现它很有用,因为它提供了解析/验证等附加功能。
    猜你喜欢
    • 2014-03-28
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多