1

データ オブジェクトを JSON に変換し、 and で戻していJSON.stringifyますJSON.parse

これは、すべてのデバイスでうまく機能しますが、Samsung Galaxy SIIでは次のようになります。

console.log(jsonObj.gebDat+"::"+new Date(jsonObj.gebDat));

出力が得られます:

1973-07-01T10:49:25.134Z::無効な日付

私はこれをこの回答とまったく同じように実装しています。ほとんどのデバイスで機能しますが、何か間違っていますか??

アップデート

質問を明確にするために。文字列呼び出しを作成します

var stringToSave = JSON.stringify({gebDat: dataclass.gebDat, <here are some more variables>});

それから私はそれを保存します。後で、文字列をロードして解析します

var jsonObj = JSON.parse(stringToSave);

次に、日付を再度設定しようとします(その行の直前にログを呼び出します)

console.log(jsonObj.gebDat+"::"+new Date(jsonObj.gebDat));
this.gebDat = new Date(jsonObj.gebDat);

ログには、上記のように無効な日付が表示されます。日付を表すとNaN.NaN.NaN、予想される代わりに表示されます01.07.1973

4

2 に答える 2

1

1.日付文字列の形式は実装に依存します。日付を保存するときは、常にタイムスタンプを使用することをお勧めします。

var timestamp = Date.parse( new Date() );//1372675910000

保存されたタイムスタンプを使用して、後で日付を再作成できるようになりました

var date = new Date(1372675910000);//Mon Jul 01 2013 16:21:50 GMT+0530 (India Standard Time)

2.現在のソリューションから簡単に移行するには、異なるタイムゾーンを処理しない場合に備えて、

var dateString = jsonObj.getDat.substring(0,23);
var datePart = dateString.split('T')[0].split('-');
var timePart = dateString.split('T')[1].split(/[:.]/);
var DateOj = new Date(datePart[0], datePart[1], datePart[2], timePart[0], timePart[1], timePart[2]);

あなたの更新を参照して、1を明確にさせてください。

var stringToSave = JSON.stringify({gebDat: Date.parse(dataclass.gebDat), <here are some more variables>});

var jsonObj = JSON.parse(stringToSave);

console.log('timestamp :' + jsonObj.gebDat);//1372680083000
console.log(new Date(jsonObj.gebDat));//Mon Jul 01 2013 17:31:23 GMT+0530 (India Standard Time)
于 2013-07-01T11:03:24.300 に答える