DateTime :: createFromFormat - php проблема формата

PHP - DateTime :: createFromFormat - возвращает новый объект DateTime, отформатированный в соответствии с указанным форматом

, это работает:

$var = DateTime::createFromFormat('Ymd','20100809')->getTimestamp();

, но это не с

. Вызов функции-члена getTimestamp () для необъекта

$var = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00')->getTimestamp();
8
задан zzlalani 7 February 2014 в 06:27
поделиться

4 ответа

Н: М: S M - краткое название месяца, а S - порядковый (st, nd, rd, th) день месяца. попробуйте H: i: s

0
ответ дан 5 December 2019 в 06:52
поделиться

Это должно быть

DateTime::createFromFormat('Y/m/d H:i:s','2010/08/09 07:47:00')->getTimestamp()
                                    ^ ^

См. дата , чтобы узнать об используемом формате.

В этом случае вы также можете использовать strtotime . Это даст тот же результат:

strtotime('2010/08/09 07:47:00')

Другой способ:

date_create('2010/08/09 07:47:00')->getTimestamp()

Обратите внимание, что DateTime :: createFromFormat возвращает FALSE в случае ошибки. Вы можете получить ошибки с помощью DateTime :: getLastErrors () :

<?php
$d = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00');
var_dump($d);
var_dump(DateTime::getLastErrors());

даст:

bool(false)
array(4) {
  ["warning_count"]=>
  int(0)
  ["warnings"]=>
  array(0) {
  }
  ["error_count"]=>
  int(3)
  ["errors"]=>
  array(1) {
    [14]=>
    string(13) "Trailing data"
  }
}
9
ответ дан 5 December 2019 в 06:52
поделиться

В данном случае часть M: S неверна. Это должно быть i: s . См. Руководство по date () .

Однако это подчеркивает более глубокую концептуальную проблему: неправильный ввод любого параметра приведет к фатальной ошибке, что является плохим поведением для приложения в производственной среде.

Из руководства по createFromFormat :

Возвращает новый экземпляр DateTime или FALSE в случае ошибки.

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

Чтобы избежать фатальных ошибок при неправильном вводе, вам (к сожалению, поскольку это нарушает красивую цепочку) нужно сначала проверить успешность:

 $var = DateTime::createFromFormat('Y/m/d H:M:S','2010/08/09 07:47:00');

 if ($var instanceof DateTime)
  echo $var->getTimestamp();
15
ответ дан 5 December 2019 в 06:52
поделиться

Используйте s вместо S и m вместо M

  • s - секунды с ведущими нулями
  • S - английский порядковый суффикс для день месяца, 2 символа, например st, nd, rd или th

и

  • m - числовое представление
    месяц, с ведущими нулями
  • M - краткое текстовое представление месяц, три буквы, например, от января до Декабрь
0
ответ дан 5 December 2019 в 06:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: