猿问

Laravel 自动添加迄今为止的时间

我的 Laravel 应用程序似乎有问题,我一生都无法弄清楚发生了什么。


我的 MySQL 数据库中有一个简单的日期字段,其数据类型为date,在本例中值为2020-08-13,但由于某种原因,当我尝试访问日期时,它会在末尾添加一个时间戳,减去 1 天,然后抛出一个 Carbon 尾随数据错误。


肯定是这个日期,因为当我软删除它时,错误就消失了。


例如,该日期的错误是


Carbon\\Carbon::rawCreateFromFormat('Y-m-d', '2020-08-12T23:0...', NULL)


正如您所看到的,它正在删除一天并尝试在前一天晚上 11 点进行格式化?


我之前也遇到过类似的问题,Laravel 添加了0000-00-00日期,所以我必须在访问器中将其删除,但现在它抛出 11pm,我的字符串替换不再起作用。显然,我可以更改字符串替换器来查找 11pm,但我不想每次格式更改时都必须修复此问题。


我的访问器代码如下


    public function getDateAttribute($value){

        //String replace and remove the time from the value if it exists

        $value = str_replace(' 00:00:00', '', $value);

        return Carbon::CreateFromFormat('Y-m-d', $value)->format('d/m/Y');

    }

有没有人以前遇到过这样的错误,或者知道发生了什么?


斯蒂芬大帝
浏览 196回答 4
4回答

catspeake

在Laravel 7之前,日期将被序列化为如下格式:2019-12-02 20:01:00但是,在 Eloquent 模型上使用toArray或toJson方法时, Laravel 7使用新的日期序列化格式,采用ISO-8601日期格式。此ISO-8601日期始终以UTC表示,如下所示:2019-12-02T20:01:00.283041Z如果您想继续使用以前的行为,您可以重写模型上的serializeDate()方法,并将其添加到您的模型中:use DateTimeInterface;protected function serializeDate(DateTimeInterface $date){    return $date->format('Y-m-d H:i:s');}

慕村9548890

首先将列定义为模型上的 $dates 属性:$dates=['date']然后通过访问器指定您的日期格式:   public function getDateAttribute($value){              return $val->format('d/m/Y');    }

ITMISS

它正在删除一天并尝试在前一天晚上 11 点进行格式化这显然是时区转换(您可能处于 GMT+1),而这是向 GMT+0 (UTC) 的转换。您不应该修剪时间来强制“00:00:00”,因为这仅在 1 个时区有效(没有全球午夜时刻,每天每个时区都有不同的午夜时刻),而您的应用程序现在或稍后可以处理多个时区。您应该将时区(例如“欧洲/伦敦”)保存在其他数据库列中,这样您就可以保留完整的信息,并且在检索日期时,您可以动态计算该日期(之前)的午夜 -根据用户时区的时间。

弑天下

public function getDateAttribute($value){   // return  2020-08-17     $date = date('Y-m-d',strtotime($value));    return $date;}确保配置文件。您会发现有一个当地时间函数,可以将其值从 UTC 更改为您所在国家/地区的当地时间配置/应用程序.php'timezone' => 'Asia/Riyadh',
随时随地看视频慕课网APP
我要回答