javascript - 比较 Javascript 中的日期字符串

标签 javascript knockout.js

我想查看今天是否创建了数组中的项目,因此我使用 arrayFilter 来过滤数组中的每个元素,问题是,我无法让过滤器正常工作:

return ko.utils.arrayFilter(self.enquiries(), function (enquiry) {
    var include = true;

    if (self.onlyToday()) {
        var formatted = $.datepicker.formatDate("dd/mm/yy", new Date());

        include = include && +enquiry.EnquiryDate.indexOf(+formatted > -1);
    }

    return include;
});

这是我的数据:

formatted: 26/11/2012
enquiry.EnquiryDate: 08/11/2012 08:46:46 

很明显,这个查询应该被过滤,因为它不是今天创建的。

最佳答案

这里有几个问题。

  1. 您正在将字符串放入 formatted ,然后使用 +formatted > -1+formatted永远是NaN ,这从来都不是 > -1 (它也永远不会等于 -1 ,也永远不会等于 < -1 )。

  2. 您正在设置includetrue然后做include = include && ...&&之后的部分永远不会被评估,因为 && 左边的部分是 true和 JavaScript(像大多数现代语言一样)短路表达式。

  3. 如果 enquiry指的是一个对象,+enquiry可能是NaN除非你覆盖了它的 valueOf .

  4. 您正在比较字符串,这意味着比较中最重要的部分将位于左侧 - 但您的日期字符串采用的格式中最重要的值位于左侧。例如,字符串 "01/01/2013" 小于字符串 "02/02/2012" ,尽管它们所代表的日期当然不是这样。如果您想有意义地比较日期字符串,它们必须在左侧显示年份,后跟月份,然后是日期。

根据您引用的enquiry.EnquiryDate字符串,你可以这样做:

var today = $.datepicker.formatDate("yy/mm/dd", new Date());
return ko.utils.arrayFilter(self.enquiries(), function (enquiry) {
    var parts, enqDate;

    parts = enquiry.EnquiryDate.split(' ')[0].split('/');
    enqDate = parts[2] + '/' + parts[1] + '/' + parts[0];
    return enqDate === today;
});

以上注释:

  • 请注意,我获取的是今天的日期,年份位于左侧。

  • 我已删除 self.onlyToday()位,因为过滤器没有执行任何操作 if self.onlyToday()是假的。我的猜测是您希望在该过滤器函数之外进行检查,并且您要么调用该过滤器,要么不调用。

  • enquiry.EnquiryDate是一个日期时间字符串,用空格分隔,首先我们将其拆分为空格,然后我们将第一部分(日期)拆分为 / 。然后我们将其重新组合为 yy/mm/dd订单。

  • 现在我们知道我们可以做到 ===在字符串上查看查询日期是否等于今天。

当然,您可以使用 Date 进行此比较对象,但你只需要解析 enquiry.EnquiryDate字符串输入Date无论如何,对象,并且您只需要日分辨率(而不是毫秒分辨率),使用字符串比较似乎是合理的。

关于javascript - 比较 Javascript 中的日期字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13566661/

相关文章:

javascript - 正则表达式问题模式不起作用

JavaScript 错误 : "is not a function"

javascript - Knockout.js "select all"复选框

javascript - Knockoutjs清除组合框中的选定值

JavaScript 问题。我正在学习 for 循环和数组如何与方法一起工作,不知道为什么我在控制台中收到 NAN 消息

javascript - 如何退出事件函数(onclick事件)?

javascript - KnockoutJs 过滤器搜索后清空列表

javascript - knockout.js 中的事件处理程序模型更改

knockout.js - 剑道 knockout : use knockout view model with kendo datasource

javascript - 如何将 JSO 转换为 JSON?