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 に答える