【问题标题】:Laravel strange date formattingLaravel 奇怪的日期格式
【发布时间】:2017-10-23 18:31:12
【问题描述】:

我继承了一个 Laravel 项目,但在日期格式方面遇到了一个奇怪的问题。

我收到以下错误:

Carbon.php 第 582 行中的 InvalidArgumentException

发现意外数据。

发现意外数据。

找不到分隔符

发现意外数据

跟踪数据

堆栈跟踪显示问题与日期时间转换有关:

在 Model.php 第 3003 行中的 Carbon::createFromFormat('Y-m-d H:i:s.u', 'Oct 10 2017 02:31:04:493PM')

我可以看到02:31:04:493PM 作为时间的日期格式很奇怪。我不知道这种格式是从哪里来的,而且我已经花了一整天的时间来尝试。

应用程序代码中的所有日期格式均为“Y-m-d H:i:s.u”或“Y-m-d H:i:s”格式。我不知道这个在微秒之前带有: 的无效值是从哪里来的,我似乎在代码中的任何地方都找不到它。

我检查了 Model.php、Carbon.php、从 Model 继承的所有应用模型等。当我在 localhost 环境中运行项目时,一切正常,但是当我在开发环境中尝试时,发生此错误。

这让我相信它是特定于环境的,但我对 Apache/PHP/SQL Server 的了解还不够,无法知道格式的来源。数据库中的数据看起来就像正常的日期时间值一样。

关于去哪里看有什么想法或建议吗?

【问题讨论】:

  • 检查您的控制器?您可以尝试的一件事是利用 Eloquent 的 observers,并在其中记录跟踪以找出错误格式的来源。
  • 谢谢,我一直在从控制器向后工作,但它们基本上只是继承了 Model.php。我将不得不审查这些观察者的东西,看看我是否能弄清楚如何实现它,这样我至少可以更好地了解正在发生的事情。环境之间肯定有一些不同,但即使有一个完整的项目差异,我也找不到它。很奇怪。这些 SqlServerGrammar 脚本不会被缓存,是吗?
  • 通常不会,我不认为。
  • 谢谢@aynber。我最终尝试使用正确的格式在数据库响应中转换日期,它解决了这个问题。我认为 PHP 或 PDO 库中一定存在一些特定于环境的差异,导致 DB 日期默认返回不同。
  • @all 我想结束这个问题,因为问题似乎与服务器配置有关。不确定我是否应该删除问题或投票结束。

标签: php laravel php-carbon


【解决方案1】:

通过将我们的 PHP 服务器从 FreeBSD 迁移到 IIS 解决了这个问题。

我们的环境没有合适的 PDO SQLSRV 驱动程序来正确地与我们的 SQL Server 数据库通信,并且 Microsoft 不提供 FreeBSD 的预编译版本。

我们的组织不需要使用 FreeBSD,因此我们迁移到 IIS,因为它对我们的新成员来说更容易管理。通过 IIS,我们能够下载为 IIS/Windows 编译的 Microsoft PDO SQLSRV 驱动程序,这使得 DB 查询产生正确的日期格式。

【讨论】:

    猜你喜欢
    • 2019-04-02
    • 1970-01-01
    • 2013-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    相关资源
    最近更新 更多