Подтвердить что ты не робот

PHP: конвертировать строку даты в временную метку Unix

Учитывая следующие строки:

  • 01/01/11
  • 1/1/11
  • 1/1/2011
  • 01/1/2011
  • 1-1-2011
  • и т.д.

Как преобразовать их в временную метку Unix. Обратите внимание, что в большинстве случаев это будет в формате dd mm yyyy с различными разделителями.

4b9b3361

Ответ 1

Посмотрите strtotime, strptime или DateTime.

strtotime Пример:

$timestamp = strtotime('1/1/2011');

Каждая функция имеет оговорку. Например, в документации для strtotime указано, что:

Даты в форматах m/d/y или d-m-y неоднозначно, глядя на разделитель между различными компоненты: если разделитель является slash (/), то американский m/d/y является предполагается; тогда как если разделитель является тире (-) или точке (.), то Предполагается, что европейский формат d-m-y.

Вы также можете использовать preg_match, чтобы захватить все 3 части и создать собственную метку времени, используя mktime.

preg_match Пример:

if ( preg_match('/^(?P<day>\d+)[-\/](?P<month>\d+)[-\/](?P<year>\d+)$/', '1/1/2011', $matches) )
{
  $timestamp = mktime(0, 0, 0, ( $matches['month'] - 1 ), $matches['day'], $matches['year']);
}

Ответ 2

$to='23.1.2014-18:16:35'
list($part1,$part2) = explode('-', $to);
list($day, $month, $year) = explode('.', $part1);
list($hours, $minutes,$seconds) = explode(':', $part2);
$timeto =  mktime($hours, $minutes, $seconds, $month, $day, $year);
echo $timeto;

Ответ 3

Возможно, вы ищете функцию strtotime.

Однако, как предостережение, он преобразует каждый возможный формат строки в временную метку unix (эпоха), так как очень трудно однозначно разобрать каждую строку до даты-времени.