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