解析datepicker的日期以显示事件日期

时间:2015-04-21 20:58:06

标签: javascript jquery google-chrome firefox datepicker

好的,我想要实现的是解析datepicker中的日期数,然后显示它。简单。我能够为chrome做,但在Firefox中我有一些问题。       日期来自这样的ajax。

     var eventDates ={};
     //lets take some demo entry 
     var dates = [{datename:'2015-04-15 10:39:57'},{datename:'2015-04-18 10:39:57'}]  

     jQuery.each(dates ,function(key,val){
       eventDates[new Date(moment(val.datename).format('MM-DD-YYYY'))] = new Date(moment(val.datename).format('MM-DD-YYYY'));
      })
     console.log(eventDates);
     jQuery('#calendar').datepicker({
         beforeShowDay: function(date) {
            var highlight = eventDates[date];
            console.log(highlight);
            if (highlight) {
                 return [true, "event", highlight];
            } else {
                 return [true, '', ''];
            }
         },
        onSelect: function(dateText, inst) { 
            location.href = '/schedule';
        }

    });

所以上面的解决方案适用于chrome,但是当遇到firefox未定义的日期错误时会被抛出。

我已经尝试过一些方法来解析firefox的日期,这在chrome中效果很好。

//method 1
eventDates[Date.parse(moment(val.date).format('MM-DD-YYYY'))] = Date.parse(moment(val.date).format('MM-DD-YYYY'));

//method 2 
eventDates[moment(val.date)] =moment(val.date);

第二个方法日期即将发布,但是没有在datepicker中显示。但它适用于铬。呃。对firefox的任何建议。

有任何帮助吗?告诉我,如果我在某处迷路了。

更新

从这里可以看出,datepicker有自己的解析日期的方法。我在上面的例子中展示了一些奇怪的对象字符串,但是从这里可以使用datepicker parse方法。

1 个答案:

答案 0 :(得分:1)

您正在创建一个以日期对象作为键和值的对象,这是一个非常奇怪的对象,但是比较日期对象应该在理论上以toValue为基础进行调用,但是它会被调用。还是有点奇怪。

此外,jQuery的datepicker有一个内置的方法来解析与Moment基本相同的日期。

重写它看起来像这样

var dates = [{
    'date': '2015-04-15 10:39:57'
}, {
    'date': '2015-04-18 10:39:57'
}]

var eventDates = jQuery.map(dates, function (val) {
    return $.datepicker.parseDate('yy-mm-dd', val.date.split(' ').shift()).getTime();
});

jQuery('#calendar').datepicker({
    beforeShowDay: function (date) {
        return eventDates.indexOf(date.getTime()) != -1 ? [true, "event", date] : [true, '', '']
    },
    onSelect: function (dateText, inst) {
        location.href = '/schedule';
    }
});

FIDDLE