Я пытаюсь преобразовать дату из yyyy-mm-dd
в dd-mm-yyyy
(но не в SQL); однако я не знаю, как функция даты требует метки времени, и я не могу получить метку времени из этой строки.
Как это возможно?
Я пытаюсь преобразовать дату из yyyy-mm-dd
в dd-mm-yyyy
(но не в SQL); однако я не знаю, как функция даты требует метки времени, и я не могу получить метку времени из этой строки.
Как это возможно?
Ответы:
Используйте strtotime()
и date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(См. Документацию strtotime и date на сайте 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» (гггг-мм-дд), просто используйте 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()
strtotime()
полезно для преобразования формата истинного типа (Ymd) в другие форматы, но DateTime::createFromFormat()
универсально. Это как STR_TO_DATE
в MySQL
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);
Для получения дополнительной информации см. Документацию дляstrtotime
.
Или даже короче
$new_date = date('d-m-Y', strtotime(your date variable));
Также еще одна неясная возможность:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Я не знаю, буду ли я использовать это, но все же :)
Примечание . Поскольку за этот пост иногда голосуют против, я вернулся сюда, чтобы просить людей больше не голосовать за него. Мой ответ древний, не технически правильный, и здесь есть несколько лучших подходов. Я храню его здесь только в исторических целях.
Хотя в документации плохо описана функция strtotime, @rjmunro правильно исправил проблему в своем комментарии: она указана в формате ISO «YYYY-MM-DD».
Кроме того, хотя моя функция Date_Converter все еще может работать, я хотел бы предупредить, что ниже могут быть неточные утверждения, поэтому не обращайте на них внимания.
Самый голосующий ответ на самом деле неверен!
В руководстве PHP strtotime здесь говорится, что «Функция ожидает получить строку, содержащую формат даты на английском языке». На самом деле это означает, что ожидается американский формат даты в США, такой как «mdY» или «m / d / Y».
Это означает, что дата, указанная как «Ymd», может быть неверно истолкована strtotime
. Вы должны предоставить дату в ожидаемом формате.
Я написал небольшую функцию для возврата дат в нескольких форматах. Используйте и изменяйте по желанию. Если кто-то превратит это в класс, я был бы рад, если бы этим поделились.
function Date_Converter($date, $locale = "br") {
# Exception
if (is_null($date))
$date = date("m/d/Y H:i:s");
# Let's 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()
и изменения ее формата на формат дд / мм / гггг , а затем распечатка с использованием 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']));
Вы можете изменить формат, используя дату () и strtotime ().
$ date = '18.09.2009';
дата эха ('dm-y', strtotime ($ date));
Результат:
18-09-19
Мы можем изменить формат, изменив (dmy).
Для этого конкретного преобразования мы также можем использовать строку формата.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Очевидно, что это не будет работать для многих других преобразований формата даты, но так как мы просто переставляем подстроки в этом случае, это еще один возможный способ сделать это.
strtotime()
. :-)
function dateFormat($date) {
$m = preg_replace('/[^0-9]/', '', $date);
if (preg_match_all('/\d{2}+/', $m, $r)) {
$r = reset($r);
if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
}
}
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31
Простой способ использования strtotime()
и date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Со временем
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
Используйте date_create
иdate_format
Попробуй это.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}