Это на самом деле следующий вопрос От this question, но он представляет собой совершенно другую проблему. Я также знаю, что это довольно запутанно, поэтому, пожалуйста, несите меня.PHP форматирование времени путаницы
У меня есть дата, которая представляет как: 1/04/2013
, который предназначен, чтобы быть Jan 04 2013
В упомянутом выше вопрос, я должен был случайно добавить часы и минуты в формате времени, и он работает для того, что это было должен делать:
$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));
это произвело что-то вроде: 2013-05-01 08:57:00
проблема заключается в том, что теперь система видеть эту дату в качестве MAY 1st
, а не JAN 05
..
когда я автоматически вставлять эти сообщения (WP) - все сообщения, которые будут иметь дату, как 2012-05-28
будет вставлен в БД, как 1970-01-01
(я предполагаю, что это формат по умолчанию «неправильная дата» для PHP. . двадцать восьмой месяц ошибка конечно ..)
Я попытался изменить день месяца с
$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));
в
$clr_datenew = date('Y-d-m ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));
Но он производит ту же ошибку с разными комбинациями дат.
После того, как коллега дал мне совет, что:
StrToTime интерпретирует х/у/г, как мм/дд/гг [гг], и хуг, как дд-мм-гггг или уу-мм- дд, в зависимости от того, г состоит из 4 цифр или 2.
Я также попытался:
date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime(str_replace('/','-',$clr_date)));
Я действительно теряя свой ум здесь :-)
Я предполагаю, что это потому, что я использую strtotime(), где функция фактически «угадывает», как отформатировать мое время на основе слабого «человеческого» формата.
Есть функция, чтобы преобразовать даты из одной даты в другую, указав как исходный формат даты, так и желаемый формат преобразования?
dummy_function($origformat,$wantedformat)
что-то вроде, где я могу указать dummy_function('Y-d-m','Y-m-d')
EDIT Я После прочтения комментария по @harke что-то вызвало у меня и комбинируя его с ответом на @ Maks3w оказывается, что формат, который работает меня:
$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime(str_replace('/','-',$clr_date)));
Я не мог проверить РНР 5.3+ методы, поскольку они не столь актуальна для меня, как (внутренний) сервер в той или иной компании работает более низкую версию ..
немного дополнительного что-то, что должно быть размещены на каждой афише БД дизайнеров/программистов: http://xkcd.com/1179/
То есть - до дальнейшего уведомления :-)
Вы взглянули через список доступных функций даты? http://www.php.net/manual/en/ref.datetime.php – deceze
@deceze - конечно, у меня есть, и я также много пробовал, но, как я уже сказал, меня немного смутили все эти преобразование в формате времени. Отсюда и вопрос. –
Вам необходимо указать, какой формат даты использовать для ввода сообщения. Только когда вы точно знаете, вы можете легко написать параметр формата date(). Прямо сейчас создаваемое форматирование задается ISO 8601 как для первой части (Дата календаря как ГГГГ-ММ-ДД), так и для второй части по отдельности (Время как hh: mm: ss). Однако полученный формат не является действительной комбинацией даты и времени ISO 8601, для которой вместо буквы пробегает буква «T». Хотя формат, который вы используете, является общим. Однако это неверно, поскольку это похоже на то, что вы пишете в своем вопросе. – hakre