日期比较给出错误的结果



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

我挣扎了一整天,但想不通为什么事情会出错。

任何建议都会有所帮助!

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

对于低于 IE8 的 IP8,您可以使用填充代码。前面提到的MDN链接有一个例子。

如果你必须做很多日期/时间的东西,或者你必须支持时区等等,我建议合并momentjs库。

演示:

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>

相关内容

  • 没有找到相关文章