2017-08-19 220 views
0

昨天我已經問過關於datepicker的一個問題,但現在我面臨了一個新問題,我無法自己修復。我使用JQuery Datepicker製作日曆,我可以選擇一個日期範圍。當我試圖將dateformat從默認值(mm/dd/yy)更改爲dd.mm.yy時,它會失敗並顯示錯誤,並在嘗試選擇任何日期時停止工作。此外,使用默認的dateformat不工作我的代碼有一個默認的選擇日期加載。如何修復JQuery Datepicker dateformat?

這是我的代碼以當前日期選擇器設置(它使得可以選擇日期範圍,並與其他類風格的它,也它把從日期隱入輸入和可見div的),以飽滿的造型也看起來像截圖:

日期選擇器的工作範圍:

datepicker range work

希望你能幫助我這種情況下!

// This code doesn't work with default dateformat 
 
// start date on default 
 
//$('#start-date').val($.datepicker.formatDate('dd.mm.yy', new Date())); 
 
//$('.start-date-visible').text($.datepicker.formatDate('dd.mm.yy', new Date())); 
 
// end date on default 
 
//$('#end-date').val($.datepicker.formatDate('dd.mm.yy', new Date(new Date().getTime() + 6 * 24 * 60 * 60 * 1000))); 
 
//\$('.end-date-visible').text($.datepicker.formatDate('dd.mm.yy', new Date(new Date().getTime() + 6 * 24 * 60 * 60 * 1000))); 
 
     
 
     // jquery datepicker settings 
 
     $(function() { 
 
      $("#datepicker").datepicker({ 
 
       numberOfMonths: 3, 
 
       showButtonPanel: false, 
 
       minDate: 0, 
 
       beforeShowDay: function(date) { 
 
        var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $('#start-date').val()); 
 
        
 
        var date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $('#end-date').val()); 
 
        
 
        if (date1 && date && (date1.getTime() == date.getTime())) { 
 
         return [true, 'ui-red-start', '']; 
 
        } 
 
        if (date2 && date && (date2.getTime() == date.getTime())) { 
 
         return [true, 'ui-red-end', '']; 
 
        } 
 

 
        if (date >= date1 && date <= date2) { 
 
         return [true, 'ui-state-selected-range', '']; 
 
        } 
 

 
        return [true, '', '']; 
 
       }, 
 
       onSelect: function(dateText, inst) { 
 
        var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $('#start-date').val()); 
 
        var date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $('#end-date').val()); 
 
        if (!date1 || date2) { 
 
         $('#start-date').val(dateText); 
 
         $('.start-date-visible').text(dateText); 
 
         $('#end-date').val(''); 
 
         $('.end-date-visible').text(''); 
 
         $(this).datepicker('option', dateText); 
 
        } else { 
 
         if (new Date(dateText) < date1) { 
 
          var sDate = $('#start-date').val(); 
 
          $('.start-date-visible').text(dateText); 
 
          $('#start-date').val(dateText); 
 
          $(this).datepicker('option', null); 
 

 
          $('.end-date-visible').text(sDate); 
 
          $('#end-date').val(sDate); 
 

 
         } else { 
 
          $('.end-date-visible').text(dateText); 
 
          $('#end-date').val(dateText); 
 
          $(this).datepicker('option', null); 
 
         } 
 
        } 
 
       } 
 
      }); 
 
     });
td.ui-state-selected-range:first-child a { 
 
    border-radius: 20px 0 0 20px; 
 
} 
 
td.ui-state-selected-range:last-child a { 
 
    border-radius: 0 20px 20px 0; 
 
} 
 
.ui-red-start a { 
 
    position: relative; 
 
    background-color: #F29676; 
 
    border-radius: 20px; 
 
    border: 1px solid #f29676 !important; 
 
} 
 
.ui-red-start a:before { 
 
    content: ''; 
 
    right: -1px; 
 
    left: 50%; 
 
    top: -1px; 
 
    bottom: -1px; 
 
    position: absolute; 
 
    border: 1px solid #f29676; 
 
    border-right: none; 
 
    background-color: #f8c3b1; 
 
    z-index: -1; 
 
} 
 
.ui-red-end a { 
 
    position: relative; 
 
    background-color: #F29676; 
 
    border-radius: 20px; 
 
    border: 1px solid #f29676 !important; 
 
} 
 
.ui-red-end a:before { 
 
    content: ''; 
 
    left: -1px; 
 
    right: 50%; 
 
    top: -1px; 
 
    bottom: -1px; 
 
    position: absolute; 
 
    border: 1px solid #f29676; 
 
    border-left: none; 
 
    background-color: #f8c3b1; 
 
    z-index: -1; 
 
} 
 

 
.ui-state-selected-range .ui-state-default { 
 
    border: 1px solid #f29676 !important; 
 
    border-left: none !important; 
 
    border-right: none !important; 
 
    background: #f8c3b1 !important; 
 
    box-sizing: border-box; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script> 
 
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet"/> 
 

 

 
<input type="text" id="start-date" style="visibility:hidden"> 
 
<input type="text" id="end-date" style="visibility:hidden"> 
 

 
<div class="start-date-visible"></div> 
 
<div class="end-date-visible"></div> 
 
<div id="datepicker"></div>

回答

1

// This code doesn't work with default dateformat 
 
// start date on default 
 
//$('#start-date').val($.datepicker.formatDate('dd.mm.yy', new Date())); 
 
//$('.start-date-visible').text($.datepicker.formatDate('dd.mm.yy', new Date())); 
 
// end date on default 
 
//$('#end-date').val($.datepicker.formatDate('dd.mm.yy', new Date(new Date().getTime() + 6 * 24 * 60 * 60 * 1000))); 
 
//\$('.end-date-visible').text($.datepicker.formatDate('dd.mm.yy', new Date(new Date().getTime() + 6 * 24 * 60 * 60 * 1000))); 
 

 
// jquery datepicker settings 
 
$(function() { 
 
    $("#datepicker").datepicker({ 
 
     numberOfMonths: 3, 
 
     showButtonPanel: false, 
 
     minDate: 0, 
 
     dateFormat: 'dd/mm/yy', 
 
     beforeShowDay: function(date) { 
 
      var date1 = $.datepicker.parseDate("dd/mm/yy", $('#start-date').val()); 
 
      var date2 = $.datepicker.parseDate("dd/mm/yy", $('#end-date').val()); 
 

 
      // var date2 = $.datepicker.parseDate("dd/mm/yy", $('#end-date').val()); 
 

 
      if (date1 && date && (date1.getTime() == date.getTime())) { 
 
       return [true, 'ui-red-start', '']; 
 
      } 
 
      if (date2 && date && (date2.getTime() == date.getTime())) { 
 
       return [true, 'ui-red-end', '']; 
 
      } 
 
      
 
      //change here for selection 
 
      
 
      if(date1 && date2 && date1-date2){ 
 
      if (date2<=date && date<=date1) { 
 
       return [true, 'ui-state-selected-range', '']; 
 
      } 
 
      } 
 
      else if(date1 && date2 && date2-date1){ 
 
      if (date2<=date && date<=date1) { 
 
       return [true, 'ui-state-selected-range', '']; 
 
      } 
 
      } 
 

 
      if (date1<=date && date<=date2) { 
 
       return [true, 'ui-state-selected-range', '']; 
 
      } 
 

 
      return [true, '', '']; 
 
     }, 
 
     onSelect: function(dateText, inst) { 
 
      var date1 = $.datepicker.parseDate("dd/mm/yy", $('#start-date').val()); 
 
      var date2 = $.datepicker.parseDate("dd/mm/yy", $('#end-date').val()); 
 
      if (!date1 || date2) { 
 
       $('#start-date').val(dateText); 
 
       $('.start-date-visible').text(dateText); 
 
       $('#end-date').val(''); 
 
       $('.end-date-visible').text(''); 
 
       $(this).datepicker('option', dateText); 
 
      } else { 
 
       if (new Date(dateText) < date1) { 
 
        var sDate = $('#start-date').val(); 
 
        $('.start-date-visible').text(dateText); 
 
        $('#start-date').val(dateText); 
 
        $(this).datepicker('option', null); 
 

 
        $('.end-date-visible').text(sDate); 
 
        $('#end-date').val(sDate); 
 

 
       } else { 
 
        $('.end-date-visible').text(dateText); 
 
        $('#end-date').val(dateText); 
 
        $(this).datepicker('option', null); 
 
       } 
 
      } 
 
     } 
 
    }); 
 
});
td.ui-state-selected-range:first-child a { 
 
    border-radius: 20px 0 0 20px; 
 
} 
 
td.ui-state-selected-range:last-child a { 
 
    border-radius: 0 20px 20px 0; 
 
} 
 
.ui-red-start a { 
 
    position: relative; 
 
    background-color: #F29676; 
 
    border-radius: 20px; 
 
    border: 1px solid #f29676 !important; 
 
} 
 
.ui-red-start a:before { 
 
    content: ''; 
 
    right: -1px; 
 
    left: 50%; 
 
    top: -1px; 
 
    bottom: -1px; 
 
    position: absolute; 
 
    border: 1px solid #f29676; 
 
    border-right: none; 
 
    background-color: #f8c3b1; 
 
    z-index: -1; 
 
} 
 
.ui-red-end a { 
 
    position: relative; 
 
    background-color: #F29676; 
 
    border-radius: 20px; 
 
    border: 1px solid #f29676 !important; 
 
} 
 
.ui-red-end a:before { 
 
    content: ''; 
 
    left: -1px; 
 
    right: 50%; 
 
    top: -1px; 
 
    bottom: -1px; 
 
    position: absolute; 
 
    border: 1px solid #f29676; 
 
    border-left: none; 
 
    background-color: #f8c3b1; 
 
    z-index: -1; 
 
} 
 

 
.ui-state-selected-range .ui-state-default { 
 
    border: 1px solid #f29676 !important; 
 
    border-left: none !important; 
 
    border-right: none !important; 
 
    background: #f8c3b1 !important; 
 
    box-sizing: border-box; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script> 
 
<link href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet"/> 
 

 

 
<input type="text" id="start-date" style="visibility:hidden"> 
 
<input type="text" id="end-date" style="visibility:hidden"> 
 

 
<div class="start-date-visible"></div> 
 
<div class="end-date-visible"></div> 
 
<div id="datepicker"></div>

使用dateFormat: 'dd/mm/yy',並在解析日期使用相同的格式解析它。

+0

它的工作原理,謝謝!但是現在,當我試圖選擇從最大值到最小值的日期範圍時,它不會進行可視化選擇,如果您選擇從最小值到最大值的日期,它可以正常工作,可能會發生什麼情況? –

+0

@MikeMike檢查更新的答案。 – Durga

+0

謝謝,它解決了這個問題,除了從max到min選擇時的第一個和最後一個選擇日期不會改變它們的視覺方向,無論如何,我會盡力自己解決這個問題,謝謝! [sccreenshot](https://pp.userapi.com/c841436/v841436928/1479e/UPNiX_4w324.jpg) –

相關問題