【发布时间】:2012-11-05 11:25:46
【问题描述】:
我正在使用 jquery daterangepicker,而后者又使用 jQuery datapicker。
我的 Ubuntu 系统运行良好。浏览器正在发送一个可解析的字符串:
$dateStarted = new \DateTime($post['startDate']); // Thu Nov 15 2012 00:00:00 GMT-0700 (MST)
print_r($dateStarted);
输出:
DateTime Object
(
[date] => 2012-11-15 00:00:00
[timezone_type] => 1
[timezone] => -07:00
)
在我们的测试人员 Windows 系统上,浏览器正在字符串中发送扩展时区:
$dateStarted = new \DateTime($post['startDate']); // Thu Nov 15 2012 00:00:00 GMT-0700 (Mountain Standard Time)
print_r($dateStarted);
抛出和异常:
Exception: DateTime::__construct(): Failed to parse time string
(Thu Nov 15 2012 00:00:00 GMT-0700 (Mountain Standard Time))
at position 41 (i): Double timezone specification
我在 Google 上四处搜索,但找不到有关此特定 PHP 错误的任何资源。
我正在通过删除返回相同结果的括号文本来“解决”这个问题:
$dateString = strstr($dateString, " (", true); // Thu Nov 15 2012 00:00:00 GMT-0700
这似乎很糟糕,我正在寻找有关如何正确执行此操作的建议。
【问题讨论】:
-
尝试->createfromformat(),并将这两个时区之一设为“噪音”,以便解析器忽略它。您会收到警告,因为可能会发生 TZ 冲突(例如,错误地构建了显示
GMT +0800 (EDT)的字符串。) -
我相信引导日期选择器(github.com/eternicode/bootstrap-datepicker)使用相同的基础。事实证明,当您询问所选日期时,它将返回一个 javascript Date 对象。您可以让此对象返回一个 UTC 字符串,该字符串在浏览器中始终具有相同的格式,并且可以由新的 \DateTime 解析。这样做:`var dateString = yourDate.toUTCString();'