次の問題があります。サーバーから日付を受け取ったときに、datepicker でフォーマットしたいのですが、datepicker が例外をスローするため、日付を解析できません。これが私の日付です。サーバー(obj.value)から来ています:
08.20.2012 19:01:32
そして、これが私がこの日付を解析しようとするコードです:
$.datepicker.formatDate('dd.MM.yy', new Date(obj.value));
月の完全な名前が必要なため、MMを使用します。解析後の出力は次のとおり
です。ではNaN.NaN.NaN
、この例外を取り除くにはどうすればよいでしょうか?
5 に答える
obj.value
日付 ( ) を有効な JavaScript 日付形式に変更する必要があります。サーバー側でできるなら最高です。
クライアント側で実行したい場合は、に置き換える必要があるため.
、の代わりに/
取得します。08/20/2012 19:01:32
08.20.2012 19:01:32
new Date(obj.value.replace(/\./g, '/'))
JavaScript で日付を解析しようとしていますが、これは完全に実装に依存します。多くのブラウザーは、提供された文字列を解析できないようです。次の 2 つのいずれかを行う必要があります。
- 有効な文字列を指定してください。
- Date コンストラクターを呼び出します。
この回答も参照してください: Date.parse が正しくない結果を返すのはなぜですか?
Date()
受け取っintegers
てstrings
のみ。obj に渡す前に値を処理する必要がありますDate()
まず、受信日付文字列を javascript Date() 関数で解析可能なものに再フォーマットする必要があります。サーバーからのフォーマットを制御できない場合は、次の行に沿って何かを提案します
var incDate, dateString, timeString, dateSplit, timeSplit;
incDate = obj.value.split(" ");
dateString = incDate[0];
timeString = incDate[1];
dateSplit = dateString.split(".");
timeSplit = timeString.split(":");
$.datepicker.formatDate('dd.MM.yy', new Date(dateSplit[2],dateSplit[0]-1,dateSplit[1],timeSplit[0],timeSplit[1],timeSplit[2]));
サーバーから返される内容を制御できる場合、最も簡単な方法は、書式設定された日付文字列ではなく、UNIX タイムスタンプを返すことです。
UNIX エポックと Javascript エポックは同じ (1970 年 1 月 1 日 00:00) ですが、UNIX タイムスタンプは秒単位ですが、javascript のDate
オブジェクトはミリ秒単位で動作します。
そう :
$.datepicker.formatDate('dd.MM.yy', new Date(obj.value * 1000));
HEREを見るとわかるように、obj.value は整数または文字列にすることができます。文字列の場合、JavaScript の自動型変換が乗算を処理します。