Перетворити DateTime в String PHP


225

Я вже дослідив багато сайтів щодо того, як можна конвертувати PHP DateTime об'єкт у String. Я завжди бачу "String to DateTime", а не "DateTime to String"

PHP DateTime може повторюватися, але те, що я хочу обробити в DateTime за допомогою рядкових функцій PHP.

Моє запитання - як я можу зробити PHP dateTime Object до рядка, починаючи з такого роду коду:

$dts = new DateTime(); //this returns the current date time
echo strlen($dts);

2
Чому ви хочете обробити DateTime за допомогою рядкових функцій? Що ви намагаєтеся досягти?
mgiuffrida

2
якийсь валідатор дати? in php
Netorica

Відповіді:


413

Ви можете використовувати formatметод DateTimeкласу:

$date = new DateTime('2000-01-01');
$result = $date->format('Y-m-d H:i:s');

Якщо formatчомусь не вдасться, воно повернеться FALSE. У деяких програмах може бути доцільним обробляти несправний випадок:

if ($result) {
  echo $result;
} else { // format failed
  echo "Unknown Time";
}

3
+1 Це працює. Чи можете ви, будь ласка, розповісти, як перевірити наявність null (у тому ж рядку), перш ніж проводити це перетворення. Дякую!
Ватт

2
Гей @ Ватт, хороший момент! Я розширив приклад, щоб показати, як може бути оброблена несправна справа.
rjz

3
Ви забули часовий пояс, а НЕ використовувати $date->format('c')або $date->format('Y-m-d H:i:s Z')чи$date->format('Y-m-d H:i:s T')
Тімо Huovinen

1
що за допомогою оператора вам потрібно мати можливість використовувати -> формат? У ньому сказано, що щось не вистачає у "Зенда"
хіміка

1
Ви можете використовувати цю коротшу форму $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');з PHP 5.4. Дивіться тут: docs.php.net/manual/en/migration54.new-features.php Додано доступ
Ф.Фірменіч

17

Найпростіший спосіб, який я знайшов:

$date   = new DateTime(); //this returns the current date time
$result = $date->format('Y-m-d-H-i-s');
echo $result . "<br>";
$krr    = explode('-', $result);
$result = implode("", $krr);
echo $result;

Я сподіваюся, що це допомагає.



15

Існує кілька заздалегідь визначених форматів date_d.phpдля використання з formatподібними:

define ('DATE_ATOM', "Y-m-d\TH:i:sP");
define ('DATE_COOKIE', "l, d-M-y H:i:s T");
define ('DATE_ISO8601', "Y-m-d\TH:i:sO");
define ('DATE_RFC822', "D, d M y H:i:s O");
define ('DATE_RFC850', "l, d-M-y H:i:s T");
define ('DATE_RFC1036', "D, d M y H:i:s O");
define ('DATE_RFC1123', "D, d M Y H:i:s O");
define ('DATE_RFC2822', "D, d M Y H:i:s O");
define ('DATE_RFC3339', "Y-m-d\TH:i:sP");
define ('DATE_RSS', "D, d M Y H:i:s O");
define ('DATE_W3C', "Y-m-d\TH:i:sP");

Використовуйте так:

$date = new \DateTime();
$string = $date->format(DATE_RFC2822);

3
Ви можете використовувати константу DateTime (наприклад, DateTime :: ISO8601), це полегшує читання коду.
Ан-Туан Май

2

Коротший спосіб використання списку. І ви можете робити все, що завгодно, з кожним компонентом дати.

list($day,$month,$year,$hour,$min,$sec) = explode("/",date('d/m/Y/h/i/s'));
echo $month.'/'.$day.'/'.$year.' '.$hour.':'.$min.':'.$sec;

2

Це працювало на мене

$start_time   = date_create_from_format('Y-m-d H:i:s', $start_time);
$current_date = new DateTime();
$diff         = $start_time->diff($current_date);
$aa           = (string)$diff->format('%R%a');
echo gettype($aa);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.