Вот что я имею:
$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);
если я не понял ваш вопрос, вы можете попробовать код выше ..