Получить формат даты типа "Y-m-d H: i: s" из даты php - PullRequest
8 голосов
/ 06 декабря 2009

Кто-нибудь знает способ получить строку из даты, которая содержит формат даты?

<?php
    $date = date ("2009-10-16 21:30:45");

    // smething like this?
    print date_format ($date);
?>

Я спрашиваю об этом, потому что я хотел бы оптимизировать эту функцию, которую я написал, обычно для получения даты с другим часовым поясом с сервера, без выполнения определенных действий

<?php
function get_timezone_offset ($timezone, $date = null, $format = null, $offset_timezone = null) {
    if ($date == null) $date = date ($format);
    if ($offset_timezone == null) $offset_timezone = date_default_timezone_get ();
    if ($format == null) $format = "Y-m-d H:i:s";
    // I'd like to find a way that can avoid me to write $format and get it directly from the date i pass, but I don't know a particular method can do it
    // if ($format == null) $format = date_format ($date);

    $date_time = new DateTime ($date, new DateTimeZone ($offset_timezone));
    $date_time->setTimeZone (new DateTimeZone ($timezone));
    return $date_time->format ($format);
}

print get_timezone_offset ("Europe/Rome");
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"));
print get_timezone_offset ("Europe/Rome", date ("Y-m-d H:i:s"), "Y-m-d H:i:s");
print get_timezone_offset ("Europe/Rome", "2009-10-16 21:30:45", "Y-m-d H:i:s", "America/New_York");
?>

Я надеюсь избежать регулярных выражений по соображениям производительности, но я не знаю, возможно ли это

Ответы [ 4 ]

9 голосов
/ 06 декабря 2009

Вы можете преобразовать строковую дату в отметку времени с помощью strtotime и делать с отметкой времени все, что вам нужно. ;)

<?php
$date = "2009-10-16 21:30:45";
$ts   = strtotime($date);
echo date('Y-m-d', $ts);
?>
5 голосов
/ 19 октября 2014

Функция PHP date () форматирует метку времени для более удобочитаемой даты и времени. Попробуйте этот код для вашего проекта,

 <?php
    $date=date_create('2014-10-20');
    date_time_set($date,12,20,55);
    echo date_format($date,'Y-m-d H:i:s');
    ?>
5 голосов
/ 06 декабря 2009

Насколько я знаю, нет гарантированного способа работать в обратном направлении. Наилучшим способом может быть попытка сопоставить регулярные выражения с ожидаемыми общеизвестными форматами (например, \d{2,4}[-/]\d{2}[-/]\d{2} для «Y-m-d»), но я не могу придумать простой способ сопоставления без использования регулярных выражений. Вы также должны проверить, что анализируемый формат имеет смысл, и вы не можете ничего сделать с неоднозначными датами, такими как 2 марта 2009 года, которые могут быть представлены как 09/03/02, 2009-03-02, 02/03/09, 03/02/09, или даже 09/02/03.

4 голосов
/ 05 мая 2015

Я знаю, что уже поздно, но лучше бы было:

$date = date("Y-m-d");
...