首页 > 解决方案 > 意外数据发现日期格式?

问题描述

数据库中 UTC 中有timestamp字段(非空),其值为:2019-08-09 20:06:08

我尝试使用函数将这个时间转换为当地时间:

private function toLocalTime($dateInUTC) {
        $time = strtotime($dateInUTC.' UTC');
        return date("d/m/Y H:i", $time);
}

转换为:

$response = []; // Data is present here
foreach($response as $v) {
   $v->created_at = $this->toLocalTime($v->created_at);
}

在我打电话的地方$this->toLocalTime()我得到了例外:

在此处输入图像描述

我试过这段代码:

$timestamp = '2019-08-09 10:41:00';
$date = Carbon::createFromFormat('Y-m-d H:i:s', $timestamp, 'UTC');
$date->setTimezone('your/timezone'); // 
$new_date = $date->format('your new format'); // Y-m-d H:i:s

在此处输入图像描述

也许我$timestamp的某个地方是空的?

标签: phpinvalidargumentexception

解决方案


正如我所见,您的项目中有碳:

$timestamp = '2019-08-09 10:41:00';
$date = Carbon::createFromFormat('Y-m-d H:i:s', $timestamp, 'UTC');

$date->setTimezone('America/Argentina/Buenos_Aires'); // or your timezone
$new_date = $date->format('Y-m-d H:i:s'); // or your new format

在你的例子中:

private function toLocalTime($dateInUTC) 
{
    // parse your date with carbon and set that as UTC
    $date = Carbon::createFromFormat('Y-m-d H:i:s', $dateInUTC, 'UTC');
    // set your timezone to get a local time.
    $date->setTimezone('America/Argentina/Buenos_Aires'); // or your timezone
    return = $date->format('Y-m-d H:i:s'); // or your new format
}

https://www.php.net/manual/en/timezones.php

如果您没有使用本机 php 安装 Carbon 作为示例:

private function toLocalTime($dateInUTC) 
{

    $utc_date = \DateTime::createFromFormat('Y-m-d H:i:s', $dateInUTC), new DateTimeZone('UTC'));

    $utc_date->setTimeZone(new \DateTimeZone('America/Argentina/Buenos_Aires'); // or your timezone

    return $utc_date->format('Y-m-d H:i:s'); // or your new format
}

推荐阅读