Carbon \ Carbon является расширением DateTime php, поэтому вы можете прочитать на php.net , чтобы узнать больше.
Хотя America/US
не является действительным часовым поясом, поэтому с этим что-то происходит.
В любом случае,
В базе данных я получил: 2018-10-30 01: 45: 00
Если ваш тип данных - TIMESTAMP или DATETIME, mysql всегда будет иметь компонент даты для данных в этом столбце.
Во-первых, давайте выделим время из массива $value
, чтобы облегчить понимание и отладку оставшейся части обсуждения:
$time = $value["time"];
С этого момента, не обращайте внимания на внутренние поля, раскрываемые var_dump . На самом деле они могут существовать или не существовать в объекте. Используйте наиболее хорошо документированные методы интерфейса, описанные в ссылке выше или в Carbon docs . В противном случае поля, заданные var_dump, будут сбивать вас с толку.
Если вы просто хотите, чтобы время дня было представлено в виде строки, вы используете метод DateTime :: format ():
$timestr = $time->format('H:i:s');
Обратите внимание, что если вы вставите эту строку в базу данных с типом столбца DATETIME, она не будет работать. Mysql потребует строку с информацией о дате.
Следующий фрагмент кода не соответствует приведенному выше коду:
$data = Excel::selectSheetsByIndex(0)->load($path, function($reader) {
})->get()->toArray();
foreach ($data as $key => $value) {
$time = Carbon::createFromFormat('Y-m-d h:i:s',$value["time"])->format('h:i:s');
print_r($time);
}
Вы пытаетесь создать экземпляр Carbon, используя метод createFromFormat () . Первый предоставленный вами параметр сообщает Carbon (на самом деле DateTime), каким будет формат вашей входной строки. Данные, которые вы предоставляете, равны H:i:s
(при условии, что $ value ["time"] считывается из столбца времени на листе Excel), но вы сообщаете Carbon, что вы дадите ему Y-m-d h:i:s
. Поскольку формат, который вы обещаете, не соответствует данным, которые вы предоставляете объекту, в результате получается значение NULL.
Либо (разбито на шаги для ясности):
$time = Carbon::createFromFormat('H:i:s', $value["time"]);
$timestr = $time->format('h:i:s');
или
$time = Carbon::createFromFormat('d-m-Y H:i:s', $value["date"] . " " . $value["time"]);
$timestr = $time->format('h:i:s');
будет работать.
Второй дает вам объект Carbon, который гораздо более полезен - первый, вероятно, будет иметь нулевой год по умолчанию. В обоих случаях часовой пояс будет зоной машины, на которой выполняется код. Вы можете переопределить это при необходимости.
Обратите внимание, что если я запутался, и программа чтения Excel фактически возвращает объекты Cabon, а не строки, вы можете полностью исключить весь код createFromFormat
. Нет смысла делать объект Carbon из объекта Carbon.