2012-03-05 6 views
1

2つの日付を比較するTitanium Appceleratorでjavascriptで何かを構築しています。2つの日付を比較するJavaScriptはNaNを返します

私は満了をプロパティ文字列として保存します。値は2012-02-29 05:00:00 +0000 current_dateの値は2012-03-05 22:49:54 +0000

ですが、期限切れのDate.parseを実行すると、その結果は次のようになります。 NaN、unixタイムスタンプを返すcurrent_dateと比較して1330987794000を返します。

なぜでしょうか? expirationStringあり、日付ストリングに必要なスペックに不正な形式ことができるが

var current_date = new Date(); 
var expiration = Ti.App.Properties.getString("expiration"); 
Ti.API.info(expiration); // returns 2012-02-29 05:00:00 +0000 
Ti.API.info(current_date); // returns 2012-03-05 22:49:54 +0000 

var check_expiration = Date.parse(expiration); 
var check_current_date = Date.parse(current_date); 
Ti.API.info(check_expiration); // returns NaN 
Ti.API.info(check_current_date); // returns 1330987794000 
+0

どのプラットフォームですか?あなたが 'Date.parse()'をそのブラウザのコンソールで手動で実行した場合、どういうことが起こりますか? – davin

+0

Date.parse oddly returned 1969-12--2147483629 -596:-31:-23 +0000 –

答えて

0

Date.parse()Dateインスタンスを返しません。代わりに、エポックからのミリ秒数を表す整数を返します。あるいは、渡されたものが解析可能でなかった場合は、NaNを返します。

コードでcurrent_dateDateのインスタンスです。日付オブジェクトは、明らかに日付として解析可能です。ログアウトすると、その日付オブジェクトにtoString()が呼び出され、ログに記録されます。

ただし、expirationDateではありません。文字列です。また、実行しているプラ​​ットフォームのJS envは、その文字列形式を解析可能な日付文字列として認識しません。

代わりに日付を整数として格納することをお勧めします。 dateObj.getTime()Date.now()あなたが保存することができ、両方のリターン整数し、その後のような単純な限り実際の日付オブジェクトに戻ってそれらを回し:確実にクロスプラットフォームに動作します

myDate = new Date(parseInt(dateIntegerAsString, 10)); 

、そしてより堅牢よりも、おそらくはるかに速く、それあなたがここで行っている日付の解析。

1

野生暗闇の中で刺しが、current_dateDateを目的とします。ここを参照してください:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/parse

あなたはexpirationで返された文字列を確認する必要がありますが、標準に準拠しています。

+0

申し訳ありませんが、私の同僚の1人がそれを理解しました。ここにあります。私はそれを日付に変換してハイフンを削除する必要があると思います。 var expiration = new Date(Ti.App.Properties.getString( "expiration")。replace(/ -/g、 '/')); –

関連する問題