2016-04-20 11 views
1

私は、それはJSに次のコードを使用して、日付タイプであるかどうかをJSで正しく日付を解析するには?

var dateString = "2015"; 
Date.parse(dateString) 

を日付文字列をチェックしようとしている。しかし、それは常にで1420070400000.

として解析された文字列を返します。 C#

私はDateTime.TryParse方法で日付文字列をチェックすると、それは解像度を提供します2015年の "ult"は日付ではありません。

DateTime.TryParse("2015", CultureInfo.InvariantCulture, DateTimeStyles.None, out date) 

日付の文字列をチェックする最も良い方法は何ですか?

+2

use moment.js。それは素晴らしい機能と使いやすいです。 –

答えて

0

Date.parseは、1970年1月1日00:00:00 UTC以降のミリ秒数を返します。有効でない場合は、NaNを返します。

は、新しい日付オブジェクトを作成する必要があり、有効な日付オブジェクトを取得するには、同様にあなたはそれをより多くのC#のスタイルをしたい場合はもちろん、文字列や日付のプロトタイプを拡張することができ

new Date(Date.parse(2015)) 

String.prototype.TryParseToDate = function() { 
    var parsedDate = Date.parse(this); 
    // todo, implement errorhandling 
    return new Date(parsedDate); 
}; 

"2015".TryParseToDate(); // this returns the parsed date 


Date.prototype.TryParse = function(inputString) { 
    var parsedDate = Date.parse(inputString); 
    // todo, implement errorhandling 
    return new Date(parsedDate); 
}; 

var date = new Date(); 
date.TryParse("2015"); // this returns the parsed date 

エラー処理の例

String.prototype.TryParseToDate = function() { 
    var parsedDate = Date.parse(this); 

    if(isNaN(parsedDate)){ 
     throw "Not a valid date"; 
    } 

    return new Date(parsedDate); 
}; 



try { 
    "IWillCrash".TryParseToDate(); 
} 
catch(err) { 
    console.log(err); 
} 

更新

大規模なシステムを構築している場合は、拡張パターンのプロトタイプが反パターンとみなされる可能性があります。小さなもののために、私はナエと言うでしょう、気にしないでください。必要な場合はいくつかのオプションがありますが、私は通常、utilライブラリを構築したり、自分のクラスですべてをラップします。後者は私のお気に入りです。

以下は、日付utilラッパーの例です。

var myDateUtils = function(){ 
 
\t var that = this; 
 

 
\t that.TryParseToDate = function(value) { 
 
\t  var parsedDate = Date.parse(value); 
 

 
\t  if(isNaN(parsedDate)){ 
 
\t   throw "Not a valid date"; 
 
\t  } 
 

 
\t  return new Date(parsedDate); 
 
\t }; 
 

 
\t // place other functions here 
 
\t that.Greet = function(){ 
 
\t \t console.log("Hello"); 
 
\t } 
 

 
\t // return constructed object 
 
\t return that; 
 
} 
 

 

 
// construct object wrapper 
 
var myDate = new myDateUtils(); 
 
myDate.Greet(); 
 

 
// Will crash 
 
try { 
 
\t var result = myDate.TryParseToDate("IWillCrash"); 
 
    console.log(result); 
 
} 
 
catch(err) { 
 
    console.log(err); 
 
} 
 

 
// Will succeed 
 
try { 
 
\t var result = myDate.TryParseToDate("2015"); 
 
    console.log(result); 
 
} 
 
catch(err) { 
 
    console.log(err); 
 
}

+1

でもプロトタイプを拡張することが推奨されるとは限りません。 https://www.google.com/?gfe_rd=cr&ei=gRYXV5KXKM60wAO_9aDIBQ&gws_rd=ssl#q=why%20to%20avoid%20extending%20prototype –

+0

注意してください、しかし、この場合、それは適切に行われます。 –

0

多分これはあなたを助けることができますが、私はよく分かりません。

function isStringValidDate(ds) 
{ 
var d=new Date(ds); 
if(d && d.getFullYear()>0) 
return true; 
else 
return false; 
} 
関連する問題