2016-06-06 2 views
0

Мне нужно настроить дампинг, который также позволяет пользователю установить время. 6/6/16 3:28 вечераPikaday продолжает возвращать время в datepicker

$(".datepicker").each(function(index){ 
var picker = new Pikaday({ 
    field: $(this)[0], 
    position: 'bottom left', 
    format: "D/M/YY hh:mm A" 
}); 
}); 

Однако, в то время как я получил формат работает, pikaday держит возвращаясь обратно в 12:00 AM.

Что я делаю неправильно? Вот рабочий пример моего вопроса https://jsfiddle.net/pturula/hcba6L33/

+0

Я думаю, что должен быть селектор для hh: mm тоже, я вижу только селектор дня – Francesco

ответ

0

Пока я понимаю, Pikaday является датой выбора, а не время выбора даты & даже он возвращает стандартный Javascript Числа: объекта, который, по сути, работает с полными отметками времени.

Даты просто представлены его меткой времени в 0: 00h (или 12:00 pm).

Поскольку pikaday использует стандартный код JavaScript Дата объект, вы можете указать любую допустимую строку форматирования, даже если она включает в себя время дня части, но Вы можете выбрать в течение нескольких дней, так что вы всегда будете получать его 0: 00h метку времени ,

Если вы хотите выбрать дату и время, вам необходимо выполнить поиск другого объекта или реализовать его самостоятельно (например, используя pikaday и jquery timepicker).

Надеется, что это помогает ...

EDIT: Как я уже сказал Om комментарии, вы можете реализовать его самостоятельно, как два sepparated полея, работающих в качестве одного.

Здесь jsfiddle пример: https://jsfiddle.net/L82h4x1y/

$(".datepicker").each(function(index){ 

    var container = $("<span></span>"); 
    var dateFld = $("<input type=\"date\"></input>") 
     .attr("placeholder", "dd/mm/yyyy") 
     .appendTo(container) 
    ; 
    var timeFld = $("<input type=\"time\"></input>") 
     .attr("placeholder", "h:mm [pm|am]") 
     .appendTo(container) 
    ; 
    var target = $(this)  // Original input field. 
     .replaceWith(container) // Replace it in DOM. 
     .appendTo(container) // Reinsert inside new container. 
     .hide()     // Hide it (HINT: comment out me to debug). 
    ; 

    var picker = new Pikaday({ 
     field: dateFld[0], 
     //format: "D/M/YY hh:mm A" 
     format: "D/M/YY" 
    }); 

    function updateFld(){ 

     // Calculate date part: 
     // -------------------- 
     try { 
      var d = new Date(dateFld.val()); 
      if (isNaN(d)) throw "Wrong date"; 
     } catch (e) { 
      var d = new Date(); // Use current day on invalid values. 
     }; 
     d = d.getDate() 
      +"/"+(d.getMonth()+1) // "+1" fixes .getMongh() counting from 0. 
      +"/"+d.getFullYear() 
     ; 

     // Calculate time part: 
     // -------------------- 
     try { 
      var t = new Date(
       "2000/1/1 " // Prepend some valid date (notice the ending space). 
       +timeFld.val() 
      ); 
      if (isNaN(t)) throw "Wrong time"; 
     } catch (e) { 
      var t = new Date("2000/1/1 0:0"); // Use 0:00 on invalid values 
     }; 
     t = t.getHours() // 0-23 
      +":"+t.getMinutes(); 

     // Update target field: 
     // -------------------- 
     // 
     target.val(d+" "+t); 
     // NOTE: You will receive 24h date. If you really need "am/pm" you 
     // should do a few more plumbing. 

    }; 

    dateFld.on("change", updateFld); 
    timeFld.on("change", updateFld); 


}); 

Соответствующие примечания:

  • Обратите внимание, что дополнительные поля ввода does'nt есть какие-либо "имя" атрибуты, так что единственное поле который будет отправлен на отправку, будет оригинальным.

  • Поле времени принимает am/pm или 24h (любой действительный javascript Дата времени объекта), но исходное поле будет всегда заполнено стандартной датой/временем (24 часа). Если это не то, что вы хотите, тогда вам нужно сделать еще несколько сантехнических работ.

  • Как уже говорилось, вы также можете добавить плагин timepicker к полю времени (я еще не сделал).

  • Для лучшего тестирования в jsfiddle закомментируйте строку «.hide()» исходного поля. Таким образом, вы можете увидеть эффект в реальном времени.

+0

Да, я понимаю, что это дата, не дата/время. Я просто хочу иметь возможность вручную редактировать выбранную дату/время без pikaday, постоянно перезагружая его. – ipixel

+0

Хорошо. Тогда я тебя не понял. Но я думаю, что вы можете сделать что-то лучше (а также проще), чем это, заменив исходное поле на * span *, содержащее исходное поле, и два дополнительных поля: datepicker и timepicker. Тогда единственное, что вам нужно сделать, это захватить событие * change * на обоих видимых полях и вычислить исходное значение поля в качестве конкатенации соответствующих частей обоих. Это не сложно, но сложно объяснить ... Надеюсь, я найду время, чтобы написать пример позже ... – bitifet

+1

Я знаю, что вы имеете в виду, когда битфрат, я полагаю, мне нужно будет пройти этот маршрут. – ipixel

4

На своей странице ридми они говорят:

Pikaday является чистым DatePicker. Он не будет поддерживать выбор времени суток.Тем не менее, были попытки добавить временную поддержку Пикадей. См. #1 и #18. Они живут в собственной вилке.

Вы можете использовать работу @owenmead сделали совсем недавно на owenmead/Pikaday Более простой подход выбора времени делается @xeeali на xeeali/Pikaday основан на версии 1.2.0. Также @stas имеет вилку stas/Pikaday, но теперь довольно старая версия

owenmead по-прежнему активен, поэтому я предлагаю вам использовать эту. Вот обновленный пример jsfiddle. Поскольку это вилка и не так популярен, как оригинал, у нее нет cdn, поэтому я копирую склеенные мини-js и css прямо в jsfiddle.

// just to bypass "links to jsfiddle.net must be accompanied by code". There is no code change. 
0

https://jsfiddle.net/KingRider/hcba6L33/3/

$(".datepicker").each(function(index){ 
     var hour = new Date(); 
    console.log(hour.get) 
    var picker = new Pikaday({ 
     field: $(this)[0], 
     format: "D/M/YY "+hour.getHours()+":"+hour.getMinutes() 
    }); 
}); 

Сво? Вам нужно время.

+0

Это было бы удивительным решением, однако оно возвращается к текущему времени. Спасибо хоть! – ipixel

Смежные вопросы