Получить формат даты, например «Г-м-д Ч: я: с», из даты php.
-
13-09-2019 - |
Вопрос
Кто-нибудь знает способ получить строку из даты, содержащую формат даты?
<?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");
?>
Я надеюсь избегать регулярных выражений по соображениям производительности, но не знаю, возможно ли это.
Решение
Насколько мне известно, не существует гарантированного способа работы в обратном направлении.Лучшим способом может быть попытка сопоставить регулярные выражения с ожидаемыми общеизвестными форматами (например, \d{2,4}[-/]\d{2}[-/]\d{2}
для «Г-м-д»), но я не могу придумать простой способ выполнить сопоставление без использования регулярных выражений.Вам также придется убедиться, что анализируемый формат имеет смысл, и вы не можете ничего поделать с неоднозначными датами, такими как 2 марта 2009 года, которые можно представить как 09/03/02
, 2009-03-02
, 02/03/09
, 03/02/09
, или даже 09/02/03
.
Другие советы
Вы можете преобразовать дату строки в метку времени с помощью стртотайм и делайте с отметкой времени все, что захотите.;)
<?php
$date = "2009-10-16 21:30:45";
$ts = strtotime($date);
echo date('Y-m-d', $ts);
?>
Функция 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');
?>
Я знаю, что уже поздно, но было бы лучше сделать:
$date = date("Y-m-d");