Мне очень нравится эта strtotime()
функция, но руководство пользователя не дает полного описания поддерживаемых форматов даты. strtotime('dd/mm/YYYY')
не работает, работает только с mm/dd/YYYY
форматом.
Если у меня есть дата в dd/mm/YYYY
формате, как я могу преобразовать ее в YYYY-mm-dd
? Я могу сделать это с помощью explode()
функции, но я думаю, что есть лучшие решения.
str_replace('/', '-', $date);
Ответы:
Вот упрощенное решение:
Результат:
strtotime
Документация гласит:источник
echo date('Y-m-l', strtotime('01-01-2010'));
Результат2010-01-Friday
. Так что день, наступающий в конце, зависит от того, как вы указали формат даты дляdate
функции.$date = '25/05/2010'; $date = str_replace('/', '-', $date);
дополнительная строка не нужна для решения вашей проблемы.Вы можете анализировать даты в произвольном формате (начиная с PHP 5.3) с помощью DateTime :: createFromFormat
(Помимо:
!
используется для сброса неуказанных значений в метку времени Unix, т. Е. Время будет полуночным.)Если вы не хотите (или не можете) использовать PHP 5.3, то полный список доступных форматов даты / времени, которые принимает strtotime, приведен на странице справочника по форматам даты . Эта страница более подробно описывает тот факт , что
m/d/Y
выводится черезd/m/Y
(но вы можете, как уже упоминалось в ответах здесь, использованиеd-m-Y
,d.m.Y
илиd\tm\tY
).В прошлом я также прибегал к быстрому
str_replace
упоминанию в другом ответе, а также самому разбору строки даты в другом формате, таком какисточник
Это хорошее решение многих проблем:
источник
Из записки STRTOTIME Примечание:
Даты в форматах m / d / y или dmy устраняются, если посмотреть на разделитель между различными компонентами: если разделитель является косой чертой (/), то предполагается, что используется американский m / d / y; тогда как, если разделителем является тире (-) или точка (.), то подразумевается европейский формат dmy.
Это так просто.
источник
$t
и$t1
показал другой результат. Я проверил, как это.$t=strtotime(date('d-m-Y'));
и$t1=strtotime(date('m/d/Y'));
скорей всего должно быть
он вернет false, если формат не похож на правильный, но не проверяет, является ли дата действительной
источник
Я не нашел лучшего решения. Вы можете использовать
explode()
,preg_match_all()
и т.д.У меня есть статическая вспомогательная функция, как это
Вероятно, есть более подходящее название для этого, но я использую
ausStrToTime()
его, потому что оно работает с австралийскими датами (с которыми я часто имею дело, будучи австралийцем). Лучшее имя, вероятно, будет стандартизированным, но я не уверен, что это такое.источник
Я пытался преобразовать формат ddmmyy в
date("Y-m-d"
формат, но не работал, когда я непосредственно передатьddmmyy =date('dmy')
затем понял, что это должно быть в формате гггг-мм-дд так. использованная подстрока для организации
затем перешел к
date("Y-m-d",strtotime($strParam));
это сработало!
источник
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
Это будет работать для вас. Вы преобразуете строку в пользовательский формат даты, в котором вы можете указать PHP, какой исходный формат строки был ей передан. Теперь, когда это формат даты, вы можете преобразовать его в стандартный формат даты PHP, который используется MySQL.
источник
Вы получаете это значение из базы данных? Если это так, рассмотрите возможность форматирования в базе данных (например,
date_format
в mysql). Если нет, то лучше всего взорвать значение, поскольку strtotime, похоже, не оценивает значения дд / мм / гггг.источник
Если вы знаете, что это в дд / мм / ГГГГ, вы можете сделать:
Это будет соответствовать датам в форме д / м / ГГ или дд / мм / ГГГГ (или любой комбинации двух) ...
Если вы хотите поддерживать больше разделителей, чем просто /, вы можете изменить регулярное выражение на:
А затем добавьте в
[/-]
бит любые символы, которые вы хотите (обратите внимание, символ - должен быть последним)источник
\d
для десятичных цифр, а не[/d]
для прямой косой черты или символа d .Этот обходной путь проще и элегантнее, чем взрыв:
Вам не нужно знать, в каком формате вы получаете дату, но если она идет с косой чертой, они заменяются на полные остановки, и она считается strtotime европейской.
источник
Самое простое решение это:
источник
Это решение я использую, даже если ведущий ноль есть.
источник
$ date_info = '20/02/2019'; дата эха ('Ym-d', strtotime (str_replace ('/', '-', $ date_info)));
источник
Просто как это
источник