PHP strtotime (): дата, показывающая '1970-01-01' после преобразования - PullRequest
0 голосов
/ 04 мая 2018

Я читаю данные из таблицы Excel и вставляю в таблицу MySQL. В этом процессе я конвертирую метку времени (строку) в дату и время, используя метод PHP strtotime().

$timestamp = date('Y-m-d H:i:sa',strtotime(trim($value->Time)));

В некоторых случаях это не удается.

Пример:

 echo date('Y-m-d H:i:s',strtotime('04-13-2018 0:00:53'));

 echo date('Y-m-d H:i:s',strtotime('04-12-2018 0:00:53'));

Выход:

1970-01-01 00:00:00

2018-12-04 00:00:53

Может кто-нибудь помочь мне, как я могу решить эту проблему?

Примеры строк, для которых это не удалось:

04-12-2018 0:00:53
04-12-2018 0:01:53
04-12-2018 0:02:53
04-12-2018 0:03:53
04-12-2018 0:04:53
04-12-2018 0:05:53
04-12-2018 0:06:53
04-12-2018 0:07:53
04-12-2018 0:08:54
04-12-2018 0:09:54
04-12-2018 0:10:53
04-12-2018 0:11:53
04-12-2018 0:12:53
04-12-2018 0:13:53
04-12-2018 0:14:53
04-12-2018 0:15:53
04-12-2018 0:16:53
04-12-2018 0:17:53
04-12-2018 0:18:53
04-12-2018 0:19:54
04-12-2018 0:20:54
04-12-2018 0:21:54
04-12-2018 0:22:53
04-12-2018 0:23:54
04-12-2018 0:24:53
04-12-2018 0:25:54

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

Добавить к тому, на что уже отвечали.
Причина, по которой вы получаете 1970, заключается в том, что strtotime возвращает false, если не может проанализировать дату.
И 0 (ложное) время Unix 1970.

0 голосов
/ 04 мая 2018

Формат строки неправильный для strtotime() и (я не помню технический термин) значения в американском формате:

echo date('Y-m-d H:i:s', strtotime('04-13-2018 0:00:53'));
echo date('Y-m-d H:i:s', strtotime('04/13/2018 0:00:53'));

https://3v4l.org/Qnsru

Придает:

1970-01-01 01:00:00
2018-04-13 00:00:53

По сути, вы дали strtotime() (как это называется?) Значение "Европейская дата / время". Это - обозначает, что день является первой частью, а не month .

Это кусало меня давным-давно.

0 голосов
/ 04 мая 2018

Ваш формат не является форматом, который синтаксический анализатор понимает .

В вашем случае 13 не является "месяцем". Таким образом, парсер не понимает до настоящего времени.

Вы должны использовать DateTime::createFromFormat():

$date = DateTime::createFromFormat('m-d-Y H:i:s','04-13-2018 0:00:53');
echo $date->format('Y-m-d H:i:s');

Выход:

2018-04-13 00:00:53

Обратите внимание, что формат также может быть: 'm-d-Y G:i:s' с G для "24-часовой формат часа без начальных нулей" .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...