【问题标题】:.datepicker('setdate') issues, in jQuery.datepicker('setdate') 问题,在 jQuery 中
【发布时间】:2010-12-29 13:23:12
【问题描述】:

我有一个函数可以执行查询,以根据使用 .datepicker() 选择的特定日期范围获取一些数据。我正在尝试将响应数据中的日期选择器设置回执行查询之前选择的日期范围。

queryDate = '2009-11-01';
$('#datePicker').datepicker('setDate', queryDate);

有趣的结果是将日期选择器设置为今天的日期!如果它只是吐出一个错误,我就不会那么困惑了。为什么设置为今天的日期?

如何获取格式为“yyyy-mm-dd”的日期并将日期选择器设置为它?

我认为最好将日期选择器链接到的文本框设置为“queryDate”。

【问题讨论】:

    标签: jquery jquery-ui jquery-ui-datepicker


    【解决方案1】:

    当您尝试调用 setDate 时,您必须提供有效的 JavaScript Date 对象。

    queryDate = '2009-11-01';
    
    var parsedDate = $.datepicker.parseDate('yy-mm-dd', queryDate);
    
    $('#datePicker').datepicker('setDate', parsedDate);
    

    这将允许您在 datepicker 中为查询日期和字符串日期表示使用不同的格式。当您创建多语言站点时,这种方法非常有用。另一个有用的函数是 formatDate,它将 javascript 日期对象格式化为字符串。

    $.datepicker.formatDate( format, date, settings );
    

    【讨论】:

    • +1 比公认的答案好得多。太糟糕了,所以没有办法表明在接受的答案之后(在这种情况下是几年后)出现了更好的答案。
    • @Hollister,您可以将问题标记为版主查看,当然说明后面的答案更好。我认为版主可以更改答案的接受度。
    【解决方案2】:

    如果您想支持非常旧的浏览器,您应该解析日期字符串,因为在 IE9 之前不支持使用带有 Date 构造函数的 ISO8601 日期格式:

    var queryDate = '2009-11-01',
        dateParts = queryDate.match(/(\d+)/g)
        realDate = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);  
                                        // months are 0-based!
    // For >= IE9
    var realDate = new Date('2009-11-01');  
    
    $('#datePicker').datepicker({ dateFormat: 'yy-mm-dd' }); // format to show
    $('#datePicker').datepicker('setDate', realDate);
    

    查看上面的例子here

    【讨论】:

    • 你错过了一点:$('#datePicker').datepicker('setDate', realDate);
    • 不要自己解析日期。这是不好的做法。更好地使用 datepicker parseDate 函数。看看我的回答。
    • @Hollister 您确定parseDate 实用程序在编写较早的答案时存在吗?不过我同意,如果可行的话,总是更喜欢现有的代码。
    • 有人对 IE8 有任何问题吗?使用相同的技术$('#datePicker').datepicker('setDate', realDate); 似乎我遇到了一些问题。
    • 只有不支持在日期构造函数中使用日期字符串的浏览器才应该被真正考​​虑
    【解决方案3】:

    正如 Scobal 的帖子所暗示的,日期选择器正在寻找一个 Date 对象——而不仅仅是一个字符串!所以,修改你的示例代码来做你想做的事:

    var queryDate = new Date('2009/11/01'); // Dashes won't work
    $('#datePicker').datepicker('setDate', queryDate);
    

    【讨论】:

    • 工作就像一个魅力。并且宁愿使用内置的 Date 对象而不是根据 CMS 的解决方案使用一些 DIY 解析器
    • 但是,当前文档状态:新日期可能是 Date 对象或当前日期格式的字符串。您在使用 .datepicker({ dateFormat:'yy-mm-dd' }); 创建日期选择器时设置格式但这不起作用 - 这是一个错误、文档错误还是其他什么?
    【解决方案4】:

    尝试将其更改为:

    queryDate = '2009-11-01';
    $('#datePicker').datepicker({defaultDate: new Date (queryDate)});
    

    【讨论】:

    • 出于某种原因,这比 setDate 效果更好。就我而言, setDate 在某个随机间隔清除输入,但 defaultDate 每次都有效。
    【解决方案5】:
    function calenderEdit(dob) {
        var date= $('#'+dob).val();
        $("#dob").datepicker({
            changeMonth: true,
            changeYear: true, yearRange: '1950:+10'
        }).datepicker("setDate", date);
    }
    

    【讨论】:

    • 正是要找的东西,先生
    【解决方案6】:

    如果设置了 minDate 或 maxDate 选项,请检查您尝试设置的日期是否在允许的日期范围内。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2023-04-04
      • 2020-02-21
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多