Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel自动将时间添加到日期_Php_Mysql_Laravel_Php Carbon - Fatal编程技术网

Php Laravel自动将时间添加到日期

Php Laravel自动将时间添加到日期,php,mysql,laravel,php-carbon,Php,Mysql,Laravel,Php Carbon,我的Laravel应用程序似乎有问题,我一辈子都搞不清楚到底发生了什么 我的MySQL数据库中有一个简单的日期字段,它的数据类型只是date,在本例中,值是2020-08-13,但由于某种原因,当我尝试访问日期时,它会在末尾添加一个时间戳,减去1天并抛出一个数据错误 它肯定是这个日期,因为当我软删除它,错误消失 例如,此日期的错误为 Carbon\\Carbon::rawCreateFromFormat('Y-m-d','2020-08-12T23:0…',NULL) 如你所见,它取消了一天,并

我的Laravel应用程序似乎有问题,我一辈子都搞不清楚到底发生了什么

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

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

例如,此日期的错误为

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

如你所见,它取消了一天,并试图在前一天晚上11点格式化

我以前也遇到过类似的问题,Laravel在日期中添加了
0000-00-00
,因此我不得不在访问器中删除它,但现在它将在晚上11点抛出,我的字符串替换不再起作用。很明显,我可以将字符串替换程序更改为查找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');
    }

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

在Laravel 7之前,日期将被序列化为如下格式:

2019-12-02 20:01:00
但是,Laravel 7在雄辩的模型上使用toArraytoJson方法时,使用了新的日期序列化格式,日期格式为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');
}
$dates=['date']

首先在模型上定义列到$dates属性:

use DateTimeInterface;

protected function serializeDate(DateTimeInterface $date)
{
    return $date->format('Y-m-d H:i:s');
}
$dates=['date']
然后按访问者指定日期格式:

   public function getDateAttribute($value){
      
        return $val->format('d/m/Y');
    }
确保配置文件。您会发现当地时间函数可以将其值从UTC更改为您所在国家的当地时间

config/app.php

'timezone' => 'Asia/Riyadh',
它删除了一天,并试图在前一天晚上11点格式化

这显然是一个时区转换(你可能在GMT+1),这是一个GMT+0(UTC)转换


你不应该调整时间来强制“00:00:00”,因为这只适用于一个时区(没有全球午夜时刻,每天每个时区都有不同的午夜时刻),而你的应用程序现在或以后可能处理多个时区。您应该将时区(例如“欧洲/伦敦”)保存在另一个DB列中,这样您就可以保留完整的信息,并且在检索日期时,您可以根据用户时区实时计算从该日期时间(之前)到午夜的时间。

您能说出数据字段的名称吗?尝试使用
Carbon::parse($value)->格式(‘d/m/Y’)
你什么意思对不起?@xNoJustice运行正常,不再抛出错误,但我仍然收到一个错误,日期返回错误。现在解析正确,但我得到的是
12/08/2020
当我的数据库中的日期是
13/08/2020
希望这有助于我在升级时注意到这一点,但我的问题并不严重但是序列化是错误的,它获取的日期比数据库中的日期早了1小时。谢谢您的输入!@S\R我不确定,但可能是它的for
ISO-8601
格式,该格式将日期指定为
UTC
。可能这与您的1小时有关。如果问题尚未解决,请进行数据库查询,而不是模型查询。希望您能获得预期的数据。“2019-12-02T20:01:00.283041Z”实际上是一种更完整的格式。它提供精确的毫秒和时区。如果您将此字符串传递给其他API,如
new Date()
在JS中,它会自动将其重新转换为当前时区。避免使用H:i:s,因为没有时区,实际上无法知道该日期时间应考虑在哪个时区。