我正在制作一个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 Date
在Safari。
(我实际上想从服务器获取日期并将其转换为毫秒,以便与今天的日期进行比较。)
所以它在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
您应该从服务器返回以毫秒为单位的时间,然后在new Date()
中使用它,而不是返回日期字符串。
date
对象确实接受许多不同的格式,但我可以想象UTC部分在Safari中打破了它。
我建议生成毫秒或ISO-8601;它们可以在所有主流浏览器上传递给date构造函数:
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")
我同意@Horen的意见,以及他关于从服务器传回以毫秒为单位的时间的建议。
如果你被现有的束缚住了,你需要处理格式,你可能想看看Moment.js。它还可以帮助您执行日期/时间验证。