Я пытаюсь преобразовать дату из yyyy-mm-dd в dd-mm-yyyy (но не в SQL); однако я не знаю, как функция даты требует отметки времени, и я не могу получить временную метку из этой строки.
Как это возможно?
Используйте strtotime()
и date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(см. strtotime и date docs на сайте PHP).
Изменить. Обратите внимание, что это было быстрое решение исходного вопроса. Для более обширных преобразований вы должны действительно использовать класс DateTime
для синтаксического анализа и форматирования: -)
Если вы хотите избежать преобразования strtotime (например, strtotime не может проанализировать ваш ввод), вы можете использовать
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
или, что эквивалентно:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
Сначала вы указываете формат $dateString. Затем вы сообщаете ему формат, в котором вы хотите $newDateString.
Или, если исходный формат всегда равен "Ymd" (yyyy-mm-dd), просто используйте DateTime:
<?php
$source = '2012-07-31';
$date = new DateTime($source);
echo $date->format('d.m.Y'); // 31.07.2012
echo $date->format('d-m-Y'); // 31-07-2012
?>
DateTime::createFromFormat()
- это действительно более полезно, чем strtotime()
implode('-', array_reverse(explode('-', $date)));
Без накладных расходов преобразования даты, не уверен, что это будет иметь большое значение.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Этот код работает для каждого формата даты.
Вы можете изменить порядок замены переменных, таких как $3- $1- $2, из-за вашего старого формата даты.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Подробнее:
нажмите здесь
Или даже короче:
$new_date = date('d-m-Y', strtotime(your date variable));
Еще одна неясная возможность:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Я не знаю, буду ли я использовать его, но все же:)
Изменить: потому что этот пост ответ иногда получает upvoted, я вернулся здесь, чтобы любезно попросить людей больше не повышать его. Мой ответ но не технически правильно, и есть несколько лучше подходит здесь. Я держу его здесь только для исторических целей.
Хотя документация плохо описывает функцию strtotime, @rjmunro правильно рассмотрел вопрос в своем комментарии: он в ISO формат даты "ГГГГ-ММ-ДД".
Кроме того, хотя моя функция Date_Converter может работать, я бы как предупреждать, что могут быть неточные заявления ниже, поэтому, пожалуйста, не обращайте на них внимания.
Самый проголосовавший ответ на самом деле неверен!
PHP strtotime Manual здесь утверждает, что "функция ожидает, что ей будет задана строка, содержащая английский формат даты". На самом деле это означает, что он ожидает формат американской американской даты, такой как "m-d-Y" или "m/d/Y".
Это означает, что дата, представленная как "Y-m-d", может быть неверно истолкована strtotime. Вы должны указать дату в ожидаемом формате.
Я написал небольшую функцию, чтобы возвращать даты в нескольких форматах. Использовать и изменять как будет. Если кто-то превратит это в класс, я был бы рад, если бы это было общим.
function Date_Converter($date, $locale = "br") {
# Exception
if (is_null($date))
$date = date("m/d/Y H:i:s");
# Let go ahead and get a string date in case we've been given a Unix Time Stamp
if ($locale == "unix")
$date = date("m/d/Y H:i:s", $date);
# Separate Date from Time
$date = explode(" ", $date);
if ($locale == "br") {
# Separate d/m/Y from Date
$date[0] = explode("/", $date[0]);
# Rearrange Date into m/d/Y
$date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
}
# Return date in all formats
# US
$Return["datetime"]["us"] = implode(" ", $date);
$Return["date"]["us"] = $date[0];
# Universal
$Return["time"] = $date[1];
$Return["unix_datetime"] = strtotime($Return["datetime"]["us"]);
$Return["unix_date"] = strtotime($Return["date"]["us"]);
$Return["getdate"] = getdate($Return["unix_datetime"]);
# BR
$Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
$Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]);
# Return
return $Return;
} # End Function
два способа реализации этого
1)
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2)
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
Вы можете попробовать strftime
. Что-то вроде strftime($time, '%d %m %Y');
Используйте эту функцию для преобразования из любого формата в любой формат
function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
$date_aux = date_create_from_format($from_format, $date);
return date_format($date_aux,$to_format);
}
Ниже приведен код PHP для генерации даты завтра, используя mktime()
, и измените его формат на dd/mm/yyyy, а затем распечатайте его с помощью echo
.
$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));