jQuery UI DatePicker setDate и moment.js - PullRequest
       19

jQuery UI DatePicker setDate и moment.js

0 голосов
/ 18 сентября 2019

jQueryUI datepicker, кажется, не очень хорошо работает с moment.js

Мне нужно, чтобы мой datepicker был настроен на последние 90 дней, поэтому FromDate должно быть 90 дней назад, а ToDate сегодня.

$('#FromDate').datepicker({
    format: 'dd-M-yyyy',
    todayHighlight: true,
    autoclose: true,
    orientation: 'auto bottom'
});

$('#ToDate').datepicker({
    format: 'dd-M-yyyy',
    todayHighlight: true,
    autoclose: true,
    orientation: 'auto bottom'
});

var todate = new moment();
var fromdate = new moment().subtract(90, "days");
$("#FromDate").datepicker("setDate", fromdate);
$("#ToDate").datepicker("setDate", todate);

Это выдает ошибку

JavaScript runtime error: Object doesn't support property or method 'getTime'

Что-то мне не хватает?Это похоже на проблему форматирования?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Я думаю, что вы используете другой DatePicker, так как format, todayHighlight, autoclose и orientation не являются опциями для jQuery UI DatePicker.

Вот чистый пример jQuery UI:

$(function() {
  $('#FromDate').datepicker({
    dateFormat: 'dd-M-yy'
  });

  $('#ToDate').datepicker({
    dateFormat: 'dd-M-yy'
  });

  $('#FromDate').datepicker("setDate", "-90d");
  $('#ToDate').datepicker("setDate", "0");
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div>
  <p>From
    <input type="text" id="FromDate" />
  </p>
  <p>To <input type="text" id="ToDate" /></p>
</div>

Подробнее: API jQuery UI |DatePicker |SETDATE

0 голосов
/ 19 сентября 2019

Из jQuery UI setDate doc:

Устанавливает дату для средства выбора даты.Новая дата может быть объектом Date или строкой в ​​текущем формате даты (например, "01/26/2009"), числом дней с сегодняшнего дня (например, +7) или строкой значенийи периоды ("y" для лет, "m" для месяцев, "w" для недель, "d" для дней, например, "+1m +7d") или null для очистки выбранной даты.

В вашем коде вы передаете объект момента в качестве аргумента setDate, поэтому средство выбора даты jQuery не может управлять им.Вы можете конвертировать ваши объекты моментов в нативные данные JavaScript, используя метод toDate().

Вот живой пример:

$('#FromDate').datepicker({
  format: 'dd-M-yyyy',
  todayHighlight: true,
  autoclose: true,
  orientation: 'auto bottom'
});

$('#ToDate').datepicker({
  format: 'dd-M-yyyy',
  todayHighlight: true,
  autoclose: true,
  orientation: 'auto bottom'
});

var todate = moment();
var fromdate = moment().subtract(90, "days");
$("#FromDate").datepicker("setDate", fromdate.toDate());
$("#ToDate").datepicker("setDate", todate.toDate());
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.js"></script>
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

<input type="text" id="FromDate">
<input type="text" id="ToDate">
...