Пожалуйста, я хочу получить значение месяца и года из этого кода javascript как переменная PHP $ mm =? && $ yy =? input name = "startDate" id = "startDate" class = "date-picker"
<script> $(function () { $('.date-picker').datepicker({ dateFormat: "mm/yy", changeMonth: true, changeYear: true, showButtonPanel: true, onClose: function (dateText, inst) { function isDonePressed() { return ($('#ui-datepicker-div').html().indexOf('ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all ui-state-hover') > -1); } if (isDonePressed()) { var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val(); $(this).datepicker('setDate', new Date(year, month, 1)).trigger('change'); $('.date-picker').focusout(); //Added to remove focus from datepicker input box on selecting date } }, beforeShow: function (input, inst) { inst.dpDiv.addClass('month_year_datepicker'); if ((datestr = $(this).val()).length > 0) { year = datestr.substring(datestr.length - 4, datestr.length); month = datestr.substring(0, 2); $(this).datepicker('option', 'defaultDate', new Date(year, month - 1, 1)); $(this).datepicker('setDate', new Date(year, month - 1, 1)); $(".ui-datepicker-calendar").hide(); } } }); }); </script>
Из комментария:
«Я использую этот html-код»
<input name="startDate" id="startDate" class="date-picker" /> <?php if(isset($_POST['month'])) { $month= $_POST['mm']; echo $month; $year= $_POST['yy']; echo $year; } ?> <input type="button" name="submit" />
Глядя на ваш код, вы фактически не проходите через переменные, называемые mm
и yy
(или month
на то пошло) – это не то, что делает datepicker.dateFormat
– он просто форматирует строку, startDate
в ваше поле ввода (например, startDate
) явным образом исключая день.
Вы можете передать эту дату серверу и загрузить его в объект DateTime
.
Вы можете использовать DateTime::createFromFormat()
для этого, но вам нужно добавить 01 для дня создания объекта, иначе сегодняшняя дата будет использоваться и может привести к неожиданным результатам (например, дата, установленная на 30-е место февраль).
<?php if(!empty($_POST['startDate'])) { $startDate = DateTime::createFromFormat('d/m/y', "01/{$_POST['startDate']}"); // to output the month as 'mm' echo $startDate->format('m') // to output the year as 'yy' echo $startDate->format('y'); }
Вам никогда не нужно использовать значение дня, хранящееся в объекте DateTime
но оно должно быть там.
пример
Если вы хотите поместить строку mm / yy обратно в поле <input ... />
после отправки формы, скажите, что она не прошла проверку, но вы хотите сохранить данные, введенные пользователем во вход:
<?php $startDateValue = !empty($_POST['startDate']) ? " value=\"" . (DateTime::createFromFormat('d/m/y', "01/{$_POST['startDate']}")->format('m/y')) . "\"" : ""; ?> <input name="startDate" id="startDate"<?= $startDateValue; ?> class="date-picker" />
Рекомендации