【发布时间】: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