我正在制作一个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
答案 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。它还可以帮助您执行日期/时间验证。