【问题标题】:Check if a date exists in JSON object检查 JSON 对象中是否存在日期
【发布时间】:2013-12-23 13:56:45
【问题描述】:

我有一个 php 日期字符串数组和一个原生 html5 日期输入框。 我已将日期数组输出到 json 对象以允许与 javascript 一起使用:

<script>
var date_array = <?php echo json_encode($aDates); ?>;
...

这会给出如下输出:

var date_array = {
    "2013-12-05": "2013-12-05",
    "2013-12-04": "2013-12-04",
    "2013-12-03": "2013-12-03"
    ...
    };

我正在使用 html5 原生日期输入框,我想检查用户选择的值是否存在于 json 对象中。看来,在(我的版本)chrome中,输入中日期字符串的格式是dd/mm/yyyy,所以我想一些日期解析是必要的。

这是我目前所拥有的:

var date_input = $('input#end_date');
    date_input.change(function(){
        if( jQuery.inArray(date_input.val(), date_array) > -1 ){
            date_input.parent().addClass('has-success');
            date_input.parent().removeClass('has-error');
        } else {
            date_input.parent().addClass('has-error');
            date_input.parent().removeClass('has-success');
        }
    });

这不能正常工作。 有什么改进的方法吗?

【问题讨论】:

  • date_array 中的值不是日期。它们都是字符串。因此,您需要确保date_input.val() 与您的字符串格式相同
  • date_array 不是一个数组。改用date_array = ["2013-12-05", "2013-12-04", "2013-12-03"]

标签: javascript json html date object


【解决方案1】:

我相信日期输入框应该以yyyy-mm-dd 格式(ref)的字符串形式返回日期。要检查 date_array object 中是否存在日期,您可以简单地:

var date_str = $("input#end_date").val();
if (typeof date_array[date_str] != "undefined") {
    // exists
} else {
    // does not exist
}

【讨论】:

  • 你是对的。正如@schopy 所说,尽管有占位符,但该值采用 ISO 格式,因此可以通过正确的比较轻松检查。非常感谢它现在可以工作了。
【解决方案2】:

您可以从 json new Date("2013-12-05") 中的字符串和用户输入的另一个日期创建日期,然后进行比较

【讨论】:

  • 如果输入格式正确,从 json 对象中的字符串创建一个新的日期数组似乎是一种浪费。
  • @harryg 即使占位符是mm/dd/yyyy,输入框的值和我的chrome上的json格式一样。刚看到guy777的评论,他说得对,json不是数组,一定是这样的
猜你喜欢
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 2010-10-13
  • 2017-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多