JS Date函数在Safari中不起作用

时间:2012-12-23 09:54:57

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

我正在制作一个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

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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")

答案 2 :(得分:0)

我同意@Horen,以及他建议将时间从服务器传回毫秒。

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