Минут или секунд без начального 0 PHP - PullRequest
1 голос
/ 05 марта 2020

Я нахожусь в процессе изменения дат в моей базе данных на что-то другое. Однако, когда я заставляю их конвертировать в новый стиль, я замечаю, что некоторые из них пропускают ведущий 0 в течение минут или секунд.

$origDate = Sat Jan 19 16:15:3 2019

или

$origDate = Sat Jan 19 16:8:39 2019

Это будет не удается, потому что он ищет ведущий 0. Как я могу это исправить?

$oldDate = DateTime::createFromFormat('l M d H:i:s Y', $origDate);
$origDate = $oldDate->format('Y-m-d H:i');

Ответы [ 3 ]

4 голосов
/ 05 марта 2020

Возможно, это слишком просто c, но PHP уже может автоматически анализировать этот формат без использования createFromFormat(), поэтому вы можете просто использовать:

$oldDate = new DateTime($origDate);
2 голосов
/ 05 марта 2020

Несколько более простое регулярное выражение.
Просто ищу один ди git без соседа.

$origDate = 'Sat Jan 1 6:8:3 2019';

$origDate = preg_replace("/\b\d{1}\b/", '0$0', $origDate);

echo $origDate; //Sat Jan 01 06:08:03 2019
2 голосов
/ 05 марта 2020

Вы можете сделать это:

$origDate = 'Sat Jan 19 16:8:39 2019';

$origDate = preg_replace('~:\K\d\b|\b\d(?=:)~', '0$0', $origDate);

echo $origDate;

\b ищет границу слова (ограничение между ди git (или буквой или подчеркиванием) и другим символом.
\K изменяет позицию результата сопоставления.
(?=..) - это предварительное утверждение, которое проверяет, соответствует ли совпадение подшаблона. Содержимое, найденное в подшаблоне, не включается в результат сопоставления.

Примечание: Я слишком быстро запрыгнул на свою старую лошадь, ответ @ Don'tPanic, очевидно, путь к go.

...