9

JSONオブジェクトから2012-12-31の形式で日付を取得し、それをわかりやすい値に変換して出力しようとしています。

    var redeemableDate = item.Deal.RedeemableDate; //this is coming in the form of 2012-12-31
    var redeemableDate = new Date(redeemableDate);
    var rdDay = weekday[redeemableDate.getDay()]; //using an array with weekdays
    var rdDate = redeemableDate.getDate();
    var rdMonth = monthNames[redeemableDate.getMonth()]; //using an array with month names
    var rdYear = redeemableDate.getFullYear();

    response.write('Valid ' + rdDay + ' ' + rdDate + ' ' + rdMonth + ' ' + rdYear + ' ONLY');

それはすべてFirefoxとChromeで見つけてダンディに動作しますが、SafariとIE(これまでのところIE8でのみテストされています)はそれを好みません。

FFとChromeでは、期待どおりの結果が得られます。

2012年9月2日日曜日のみ有効

しかし、SafariとIEでは、次のようになります。

有効な未定義のNaN未定義のNaNのみ

Dateオブジェクトとして設定した後でredeemableDateにアラートを送信すると、Safariは「InvalidDate」を返し、IEは「NaN」を返します。これは明らかに問題があるところです。これらのブラウザの日付オブジェクトに自分の値を取り込む方法はありますか?

4

5 に答える 5

27

yyyy-mm-dd(ISO 8601)日付形式は、SafariおよびIEではサポートされていません。ただし、これはECMAscript 5の一部であるため、時間の問題である必要があります。

解決策は、Dateへの引数として日付を渡すことです。

var date = "2012-12-31".split("-");
var your_date = new Date(date[0], date[1]-1, date[2]);

月パラメータはゼロ(1月の場合)から始まるため、文字列から取得した値から1を引く必要があることに注意してください。

編集:ショートカットについては、以下のジョー・ラーソンによる回答を参照してください。

于 2012-06-28T21:50:37.080 に答える
6

日付文字列を自分で解析することをお勧めします。

function dateFromISO( str ) {
  var d = null;
  str.replace(/^(\d\d\d\d)-(\d\d)-(\d\d)$/, function(_, y, m, d) {
    d = new Date(parseInt(y, 10), parseInt(m, 10) - 1, parseInt(d, 10));
  });
  return d;
}

redeemableDate = dateFromISO( redeemableDate );

他のブラウザがそれらの日付文字列を気に入ったとしても、それらが常にUTCとして解釈されるという問題があります。たとえば、私にとって、その文字列「2012-12-31」をFirefoxに渡すと、UTCから6時間遅れているため、日付は2012年12月30日であることがわかります。つまり、「2012-12-31」は、その日付の真夜中、UTC時間として解釈されます。世界中のすべての人に正しい日付を表示してもらいたいと仮定すると、数値を使用してDateオブジェクトを作成すると、クライアントの現地時間であると見なされます。

于 2012-06-28T21:48:05.847 に答える
2

ジャックとジョー・ラーソンの応答を組み合わせると、次のコードがうまく機能しました。

        $scope.formatDate = function(date){
                var date = date.split("-").join("/");
                var dateOut = new Date(date);
                return dateOut;
        }; 

ChromeとSafariでうまく機能します...:)
ジャックとジョーラーソンに感謝します!!!

于 2014-12-23T08:04:16.757 に答える
1

古いバージョンのInternetExplorer(および明らかにお使いのバージョンのSafari)は、などのyyyy-mm-dd文字列を解析しませんnew Date('2012-12-31')

もう1つのオプションはですがjQuery.datepicker.parseDate()、それは少しやり過ぎかもしれません。

于 2012-06-28T21:50:31.007 に答える
1

$row['date'] = date('j/n/Y',strtotime($row['date']));PHP Webサービスを使用する場合は、safari/ieで通常の機能を使用して日付を返すことをお勧めします 。

于 2014-02-24T22:10:57.373 に答える