strtotime() всегда возвращает один и тот же день месяца, но правильно получает другие части даты

У меня есть часть простого веб-приложения, которое принимает входные данные из средства выбора календаря JavaScript, отправляет их на сервер, а затем сервер преобразует их в удобочитаемое время и возвращает обратно.

Моя HTML-форма имеет значение в формате MM/DD/YYYY.

Когда это отправляется на сервер, этот PHP преобразует его в другой формат (обратите внимание, что я использую CodeIgniter, поэтому $this->input->post() совпадает с $_POST[]):

php $date = date('l, F n, Y', strtotime($this->input->post('date')));

Пример ввода и вывода

Ввод текста HTML получит значение «21.04.2013».

PHP-функция strtotime() вернет «воскресенье, 4 апреля 2013 г.».

Независимо от того, какую дату я туда ввел, strtotime() всегда возвращает мне правильную дату, за исключением дня месяца, который всегда оказывается тем же числом, что и номер месяца (например, любая дата в мае становится «5 мая 2013 г.» и т. д.).

Обновление: решено

Как только я опубликовал это, я понял, что проблема возникла из-за «n» в «l, F n, Y». Превращение его в «j» исправило ситуацию. Извините, что отнимаю у всех время.


person wgp    schedule 18.04.2013    source источник
comment
Может ли это быть связано с тем, как вы его форматируете? F = Полное текстовое представление месяца, например, январь или март. n = числовое представление месяца без начальных нулей. Похоже, вы устанавливаете месяц дважды   -  person andrew-caulfield    schedule 18.04.2013


Ответы (2)


Используйте j для дня месяца, а не n, который является числовым месяцем:

php $date = date('l, F j, Y', strtotime($this->input->post('date')));

Посмотрите в действии

person John Conde    schedule 18.04.2013
comment
Спасибо. Я как раз собирался ответить на свой вопрос. Я не могу поверить, что провел 2 дня, и все это время он смотрел мне в лицо. Теперь я чувствую себя идиотом, даже если спросил. (Я собираюсь принять ваш ответ, но он хочет, чтобы я подождал 10 минут) - person wgp; 18.04.2013
comment
Мы все когда-нибудь сталкивались с чем-то подобным. - person John Conde; 18.04.2013

См. документацию для date() здесь: http://php.net/manual/en/function.date.php

Измените n в первом параметре вашей функции даты на j, и вы получите номер дня месяца.

person Keeleon    schedule 18.04.2013