Я намагаюся перетворити дату з 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));
(Дивіться документацію щодо строку часу та дати на сайті 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()
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 "РРРР-ММ-DD".
Крім того, незважаючи на те, що моя функція Date_Converter все ще може працювати, я хочу попередити, що нижче можуть бути неточні твердження, тому, будь ласка, не ігноруйте їх.
Найбільш голосована відповідь насправді неправильна!
У посібнику з strtotime для PHP тут зазначено, що "Функція очікує, що їй буде надано рядок, що містить англійський формат дати". Це насправді означає, що він очікує американського формату дат, наприклад, "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()
та змінити його формат на формат 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']));
Ви можете змінити формат, використовуючи дату () та строку часу ().
$ date = '18.09.2019';
echo date ('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;
}