Преобразование формата даты PHP

Вот что я имею:

$dateFormat = 'M d, Y'; $dateString = 'January 23, 2010'; 

Мне нужна отметка времени $dateString поэтому я могу это сделать:

 $newFormattedDate = date('Ym-d', $timestamp); 

Я попытался использовать функцию strtotime но он пытается найти сам формат и не работает всегда. В моей ситуации я знаю как строку даты, так и формат даты.

Как я могу установить $timestamp для соответствующего значения для использования с функцией date ?

EDIT: Мне нужно, чтобы это работало как в Linux, так и в Windows.

EDIT: решение должно поддерживать PHP версии 4 или выше

EDIT: MySQL имеет функцию STR_TO_DATE которая принимает строку даты и формат даты и возвращает Ymd даты форматирования Ymd . Любая эквивалентная функция для php работает и для меня.

Начиная с PHP5.3 вы можете использовать API DateTime

 $dt = date_create_from_format('M d, Y', 'January 23, 2010'); echo date_timestamp_get($dt); 

или с обозначением ООП

 $dt = DateTime::createFromFormat('M d, Y', 'January 23, 2010'); echo $dt->getTimestamp(); 

Обратите внимание, что хотя DateTime доступен в PHP <5.3, используемые выше методы не являются и пока вы можете имитировать ->getTimestamp() с ->format('U') , нет простого createFromFormat() обхода createFromFormat()

Альтернативой может быть использование Zend_Date из Zend Framework:

 $date = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy'); echo $date->get(Zend_Date::TIMESTAMP); 

Используйте strptime , mktime и strftime :

 $ftime = strptime($dateString, $dateFormat); $timestamp = mktime($ftime['tm_hour'], $ftime['tm_min'], $ftime['tm_sec'], 1, $ftime['tm_yday'] + 1, $ftime['tm_year'] + 1900); echo strftime('Ym-d', $timestamp); 

Обратите внимание, что strptime не реализована на платформах Windows.

Обратите внимание, что аргументы mktime несколько необычны: strptime возвращает день года (между 0-365, включительно), а не день месяца и месяц, поэтому мы устанавливаем параметр месяца mktime 1 и добавляем 1 до дня года. Кроме того, strptime возвращает годы с 1900 года за год, который он возвращает, поэтому нам нужно добавить 1900 к году, прежде чем передать его до mktime .

Кроме того, вы можете проверить, является ли $ftime FALSE прежде чем передавать его в mktime . strptime FALSE означает, что входы $dateString не являются допустимым форматом даты в соответствии с $dateFormat .

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

«Простое» решение (которое уже было уценено) было бы заставить использовать PHP 5.3 и инструменты, доступные в нем.

Менее простым решением было бы взять эти дополнения и перенести их на PHP-land (с совместимостью с PHP 4, удачи).

Другой путь исследования – рассмотреть случаи, когда strtotime не работает для вас и не работает над этими ограничениями.

Насколько широко распространены ваши строки формата? Может быть возможно придумать строки формата отображения решений для функций / методов (для синтаксического анализа этой даты), поскольку они довольно ограничены.

 $dateFormat = 'M d, Y' $timestamp = strtotime($dateString); echo date($dateFormat, $timestamp); 

если я не понял ваш вопрос, вы можете попробовать код выше ..