2

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

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

所以它在 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
4

3 回答 3

3

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

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

于 2012-12-23T09:58:59.367 回答
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")
于 2012-12-23T10:12:20.217 回答
0

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

如果您与现有的东西捆绑在一起,并且需要使用格式,则可能需要查看Moment.js。它还将帮助您执行日期/时间验证。

于 2012-12-23T10:04:21.417 回答