2016-05-31 67 views
2

在我目前的任务中,我必须将给定日期与当前日期进行比较。我必须在Knockout 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 

但是这两个东西产生用两种不同的时间标记。我只是想比较指定日期与当前的日期,所以我已经试过像,

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

但是,尽管它比较,

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

我奋斗了一整天,但想不出它为什么事情出错了。

任何建议都会有所帮助!

+0

我在IE –

+1

IE版本11.0.9600.18053 –

回答

1

对于IE9及更高版本+现代浏览器,您可以使用toISOString。由于这种字符串的结构,很容易做====><比较。

对于IE8下面,您可以使用polyfill。前面提到的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

对不起,但这个评论对我来说没有意义。你能指定我关于浏览器兼容性的答案的哪些部分不清楚吗?也许你的意思是“我应用程序中的所有网页浏览器”?你没有在你的问题中指定任何浏览器及其版本...... – Jeroen