仅从Carbon对象获取时间

时间:2018-10-30 19:09:32

标签: php laravel php-carbon

我正在读取一个excel文件,其列的值类似于“ 1:45:00。但是当print_r($value["time"])从我的数组中获得此值时,我得到了一个Carbon对象,如下所示:

Carbon\Carbon Object
(
    [date] => 2018-10-30 01:45:00.000000
    [timezone_type] => 3
    [timezone] => America/US
)

然后,当我将一个值插入大容量数组时:

"time"=>$value["time"]

在数据库中,我得到:2018-10-30 01:45:00

如何只插入01:45:00而不插入整个时间戳?

编辑:我以为$value["time"]->date->format("H:i:s")可以工作,但出现错误“试图获取非对象的属性'日期'”

编辑2:这就是我读取数据的方式:

excel就像:

date         time
----------   -------
30-10-2018   01:45:00

我阅读excel的代码:

$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);
    die();
}

输出:

Call to a member function format() on null

2 个答案:

答案 0 :(得分:1)

您需要的是此处的格式:

$dt = Carbon::now();
$dt->toTimeString(); //14:15:16

答案 1 :(得分:0)

Carbon \ Carbon是php的DateTime的扩展,因此您可以在php.net阅读以了解更多信息。

尽管/\b(?!Co\.)Co(?:lorado)?\b/i 不是一个有效的时区,所以确实有些问题。

无论如何

  

在数据库中我得到:2018-10-30 01:45:00

如果您的数据类型是TIMESTAMP或DATETIME,则mysql在该列中将始终具有日期成分。

首先,让我们花些时间isEnabled数组,使其余讨论更容易理解和调试:

America/US

从现在开始,无需注意var_dump显示的内部字段。它们实际上可能会或可能不会真正存在于对象中。使用上面链接或Carbon docs中记录的文档最多的接口方法。否则,var_dump给出的字段会使您感到困惑。

如果只想将一天中的时间表示为字符串,则可以使用DateTime :: format()方法:

$value

请注意,如果您在具有DATETIME列类型的数据库中插入该字符串,则它将不起作用。 Mysql将需要一个包含日期信息的字符串。

后面的代码段似乎与上面显示的代码不匹配:

$time = $value["time"];

您正在尝试使用createFromFormat()方法创建Carbon实例。您提供的第一个参数告诉Carbon(实际上是DateTime)输入字符串的格式是什么。您提供的数据是$timestr = $time->format('H:i:s'); (假设从Excel工作表的时间列中读取了$ value [“ time”]),但是您要告诉Carbon您将给它$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); } 。由于您保证的格式与您提供给对象的数据不匹配,因此将为null。

两者之一(为了清晰起见,分为若干步骤):

H:i:s

Y-m-d h:i:s

将起作用。

第二个为您提供了一个更有用的Carbon对象-第一个可能默认为零年。在这两种情况下,时区都是运行代码的计算机所在的区域。您可以根据需要覆盖它。

请注意,如果我感到困惑,并且Excel阅读器实际上返回的是Cabon对象而不是字符串,则可以完全消除整个$time = Carbon::createFromFormat('H:i:s', $value["time"]); $timestr = $time->format('h:i:s'); 代码。用Carbon对象制成Carbon对象毫无意义。