当前位置: 首页 > 知识库问答 >
问题:

日期序列化后Laravel 7中的错误时区

邴星洲
2023-03-14

我正在开发一款新的Laravel7.1应用程序(不是升级版),但使用日期序列化似乎会影响时区。

config/app.php

'timezone' => 'Europe/Zurich',

修补程序示例

>>> \Carbon\Carbon::parse('2020-06-22')->timezone
=> Carbon\CarbonTimeZone {#3251
     timezone: Europe/Zurich (+01:00),
   }

Laravel7使用toJson()

>>> \Carbon\Carbon::parse('2020-06-22')->toJson()
=> "2020-06-21T22:00:00.000000Z"

因此,当我分析回日期时,我没有得到正确的日期。

>>> new \Carbon\Carbon('2020-06-21T22:00:00.000000Z')
=> Carbon\Carbon @1592776800 {#3266
     date: 2020-06-21 22:00:00.0 +00:00,
     timezone: "Z",
   }

>>> (new \Carbon\Carbon('2020-06-21T22:00:00.000000Z'))->format('Y-m-d')
=> "2020-06-21"

现在我是这样做的

$date = Carbon::parse('2020-06-21T22:00:00.000000Z')
    ->setTimezone(config('app.timezone'));

作为替代,我可以更改我的模型中的默认日期格式,如文档中所述

/**
 * Prepare a date for array / JSON serialization.
 *
 * @param  \DateTimeInterface  $date
 * @return string
 */
protected function serializeDate(DateTimeInterface $date)
{
    return $date->toIso8601String(); // 2019-02-01T03:45:27+00:00
}

但是我想,Carbon::parse()和/或newcarbon()默认使用我的时区是更好的-

共有1个答案

田曜瑞
2023-03-14

这里也有同样的问题。

从Laravel 6升级时-

更新到数据库时,此日期每次都会随时区设置一起移动。

当在浏览器中显示时间戳时,该字段的每个表示都必须通过(浏览器)时区设置来修复。

升级手册提出了一个解决方案。
我们在所有型号中都使用了一个特性,因此我们在其中进行了更新:

use DateTimeInterface;

/**
 * Prepare a date for array / JSON serialization.
 *
 * @param  \DateTimeInterface  $date
 * @return string
 */
protected function serializeDate(DateTimeInterface $date)
{
    return $date->format('Y-m-d H:i:s');
}

当然,最好对所有东西都使用UTC,但是这需要从JSON(ajax)的读回使用与序列化相同的时区设置/差异。

 类似资料:
  • 我正在尝试用自定义日期格式序列化和反序列化相当简单的对象: 在执行main方法时,我希望得到类似于: “日期”:“20151117” 20151117 但不幸的是得到了以下几点: {“日期”:“20151117”} 20151117-01-01T00:00:00.000+03:00(年份不正确) 似乎Jackson忽略了对象反序列化的@JSONFORMAT注释,并将字符串视为ISO-8601符号中

  • 问题内容: 我正在尝试反序列化具有JavaScript日期的json对象。在对象上调用JSON.stringify时,日期会序列化为未正确反序列化回日期的字符串。我尝试使用带有chrome,IE和FF的本机浏览器实现以及使用jquery来反序列化对象。两者都给出了一些结果。这是代码段: 我希望objDeser.Date是js日期而不是字符串。您可以在此处查看此问题的实际使用情况:http : //

  • 问题内容: 我正在尝试使用protobuf序列化结构。经过许多小时试图弄清楚我在做什么错,我决定测试google的示例,但效果不佳 我从Google(https://developers.google.com/protocol- buffers/docs/javatutorial )获得以下协议: 我正在尝试将其序列化: byte []序列化= john.toByteArray(); 我得到“ j

  • 在任何人试图告诉我这是一个重复之前,我已经试过了关于这个的解决方案,以及几乎所有其他我能找到的答案。 我的项目在IntelliJ中构建得很好,通过了我设置的所有测试,它甚至在IntelliJ内部运行得也很好,当我试图运行maven构建的JAR时,除了几个例外,我就被打了个耳光。 代码所指向的类: 根据我看到的例外情况,当通过命令提示符运行时,问题出现在第31行,它将是: 命令提示符中的堆栈跟踪如下

  • 奇怪的是下面的测试用例会失败。有人知道为什么吗?

  • 我使用的是Gson v2。8.2和改造v2。我有两门课,答案是。kt: 答案ummary.kt: 我正在列表中使用它(在Java中,仍在迁移到Kotlin): 当未被删除时,我得到一个错误:: 删除“val”后: