解析日期选择器的日期以显示事件日期

Parse date for datepicker to show event dates

好的,所以我想要实现的是将日期数解析到日期选择器中,然后显示它。简单的 。我可以为 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);

对于第二种方法,Firefox 的日期即将到来,但不会显示在日期选择器中。但它适用于 chrome。呃。对 firefox 的任何建议。

有什么帮助吗?如果我迷路了,请告诉我。

更新

因此,datepicker 有自己的方法来解析日期。我在上面的例子中展示了一些奇怪的对象字符串,但是从这里获取将使用 datepicker 解析方法。

您正在创建一个以日期对象作为键和值的对象,这是一个非常奇怪的对象,但是以这种方式比较日期对象在理论上应该可行,因为在它们上调用了 toValue,但它仍然有点奇怪。

另外,jQuery 的日期选择器有一个内置的方法来解析日期,这与 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