Добавление и удаление часов из текущего времени, создающее бесконечный цикл для datetimepicker

#javascript #jquery #datetimepicker #bootstrap-datetimepicker #eonasdan-datetimepicker

#javascript #jquery #datetimepicker #bootstrap-datetimepicker #eonasdan-datetimepicker

Вопрос:

Я использую eonasdan Bootstrap 3 datetimepicker и добавил 4 часа к параметру defaultDate по умолчанию. но при изменении я пытаюсь удалить эти 4 часа из time, создавая бесконечный цикл и показывая неправильные дату и время.

код следующий

   var $datePickerOutput = $('#datePickerOutput'),
      d = moment();

  if ( $datePickerOutput.length ) {
    var defaults = {
      inline: true,
      sideBySide: true,
      useCurrent: false,
      defaultDate: d.add(3, 'hours'),
      minDate: d,
    };
    $datePickerOutput.datetimepicker(defaults);
    $datePickerOutput.on('dp.change', function(e){
      var $this = $(this);
      var presentDate  = new Date();
      var selectedDate = new Date(e.date);

      var pd = presentDate.getDate(),
          pm = presentDate.getMonth(),
          py = presentDate.getFullYear(),
          sd = selectedDate.getDate(),
          sm = selectedDate.getMonth(),
          sy = selectedDate.getFullYear();

      if ( ( pd pm py !== sd sm sy ) ) {
        console.log(moment(e.date).format('DD-MM-YYYY hh:mm A'));
        $(this).data("DateTimePicker").date(e.date.subtract(4, 'hours'));
      }

    });
  }
  

Комментарии:

1. Непонятно, чего вы пытаетесь достичь, что pd pm py !== sd sm sy это значит? Обратите внимание, что date метод срабатывает dp.change , поэтому ваш обработчик будет выполняться снова и снова, пока pd pm py !== sd sm sy не станет false.

2. Я просто пытаюсь выяснить текущую дату. если выбранная дата не является сегодняшней, то минус 3 часа от времени и отображения. это то, что я пытаюсь сделать .. и я добавил эту проверку из-за этого. пожалуйста, дайте мне какое-нибудь решение, если я делаю неправильно. Я не очень хорошо разбираюсь в javascript

3. Но проблема возникает только тогда, когда я добавляю .subtract(4, 'hours') в строку $(this).data("DateTimePicker").date(e.date.subtract(4, 'hours'));

4. Чтобы проверить, совпадает ли выбранная дата с сегодняшним днем, вы можете использовать moment isSame , в вашем случае: moment().isSame(e.date, 'day') . В любом случае, как я уже говорил ранее, установка новой даты в средство выбора с помощью date метода снова вызовет dp.change событие.

5. тогда как я могу решить эту проблему. Я хотел показать время на сегодня на 4 часа вперед, но когда пользователь выберет следующую дату, он / она увидит текущую дату.