在我目前的任务中,我必须将给定日期与当前日期进行比较。我必须在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 :(得分:1)
对于IE9及更高版本+现代浏览器,您可以使用toISOString
。由于这种字符串的结构,您可以轻松进行{{1}},====
和>
比较。
对于IE8以下,您可以使用polyfill。前面提到的MDN链接有一个例子。
如果你需要做很多日期/时间的事情,或者你必须支持时区等,我建议加入the momentjs library。
演示:
<
&#13;
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());
&#13;
pre { background: white; padding: 10px; color: #333; font: 11px consolas; border: 1px solid #ddd; }
&#13;