2016-05-31 13 views
2

私の現在の仕事では、指定された日付と現在の日付を比較する必要があります。私はノックアウトJSでこの日付比較モジュールを追加する必要があります。指定された日付の形式は、以下のようなものです私が使用している現在の日付の後日付の比較結果が間違っています

User.StartingDate() 
Mon Jun 08 2015 00:00:00 GMT+0530 (India Standard Time) 
    __proto__: Invalid Date 

も次の形式で結果
var dateToday = new Date(); 

Tue May 31 2016 16:06:12 GMT+0530 (India Standard Time) 
    __proto__: Invalid Date 

しかし、結果、この二つのこと2つの異なる時間表記でそして、私は現在の日付で指定した日付を比較したい、それを比較しながら私は、私は一日のために苦労したが、それを理解することはできません、

User.StartingDate().toLocaleDateString() < dateToday.toLocaleDateString() 
// result is FALSE 
// but 06‎-‎08‎-‎2015 < 05‎-‎31‎-‎2016 is TRUE 

、などの
User.StartingDate().toLocaleDateString() 
"‎06‎-‎08‎-‎2015" 
dateToday.toLocaleDateString() 
"‎05‎-‎31‎-‎2016" 

を試みたが、していますなぜ物事が間違っているか。

ご意見があれば助かります。

+0

私はこの日付の比較は自分のアプリケーション内のすべてのWebブラウザでサポートする必要がありますIE –

+1

IEのバージョン11.0.9600.18053 –

答えて

1

IE9以上の最新のブラウザでは、toISOStringを使用できます。このような文字列の構造のため、====>、および<の比較は簡単です。

以下のIE8では、ポリフィルを使用できます。前述のMDNリンクは一例である。

多くの日時の処理が必要な場合、またはタイムゾーンなどをサポートする必要がある場合は、the momentjs libraryを組み込むことをおすすめします。

デモ:

function ViewModel() { 
 
    var self = this; 
 
    
 
    self.date1txt = ko.observable("Mon Jun 08 2015 00:00:00 GMT+0530 (India Standard Time)"); 
 
    self.date2txt = ko.observable("Mon Jun 08 2015 00:00:00 GMT+0530 (India Standard Time)"); 
 
    
 
    self.date1 = ko.computed(() => new Date(self.date1txt())); 
 
    self.date2 = ko.computed(() => new Date(self.date2txt())); 
 
    
 
    self.isGreater = ko.computed(() => self.date1().toISOString() > self.date2().toISOString()); 
 
    self.isSmaller = ko.computed(() => self.date1().toISOString() < self.date2().toISOString()); 
 
    self.isEqual = ko.computed(() => self.date1().toISOString() === self.date2().toISOString()); 
 
} 
 

 
ko.applyBindings(new ViewModel());
pre { background: white; padding: 10px; color: #333; font: 11px consolas; border: 1px solid #ddd; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-min.js"></script> 
 

 
Edit date1 input in txt format: <input data-bind="textInput: date1txt"><br> 
 
Edit date2 input in txt format: <input data-bind="textInput: date2txt"><br> 
 
<hr> 
 
date1 &gt; date2 ... <strong data-bind="text: isGreater"></strong><br> 
 
date1 &lt; date2 ... <strong data-bind="text: isSmaller"></strong><br> 
 
date1 === date2 ... <strong data-bind="text: isEqual"></strong><br> 
 
<hr>Debug info: <pre data-bind="text: ko.toJSON($root, null, 2)"></pre>

+0

でこれをやっています。 –

+0

申し訳ありませんが、そのコメントは私にはほとんど意味がありません。ブラウザの互換性に関する私の答えのどの部分が不明であるかを指定できますか?また、「アプリケーション内のすべてのWebブラウザ」とはどういう意味ですか?あなたはあなたの質問のブラウザとそのバージョンで何か*を指定していません... – Jeroen