无法将 PayPal IPN 返回的日期时间值输入 MySQL table
Unable to enter date time value returned by PayPal IPN into MySQL table
Paypal IPN 正在返回一个 $_POST 负载,其中包括一个名为 payment_date
的日期时间项目。此变量的值采用以下格式:
23%3A54%3A48+Jul+23%2C+2016+PDT
这当然是urlencoded。我正在为数据库更新处理它,如下所示:
$payment_date = date( 'Y-m-d H:i:s', urldecode($_POST['payment_date']) );
这个最终的 $payment_date
变量是我稍后尝试使用 PDO 插入到我的 table 中的变量。但是,上述过程返回错误:
A non well formed numeric value encountered in /purchases/paypal_ipn.php on line 70
尽管有错误,插入仍在工作,但输入的日期不正确:
1970-01-01 00:00:00
在此之前,我只尝试了没有任何格式的 urldecode:
$payment_date = urldecode($_POST['payment_date']) );
这个允许数据库插入没有任何错误,但输入的值仍然不正确:
0000-00-00 00:00:00
这里有什么我遗漏的吗?
这是来自 PayPal 的解码时间戳:
23:54:48 Jul 23, 2016 PDT
这不是 MySQL 的标准格式,但您可以使用 STR_TO_DATE
和 CONVERT_TZ
的组合来转换它:
SELECT CONVERT_TZ(STR_TO_DATE(SUBSTRING(col, 1, 21), '%H:%i:%s %b %d, %Y'),
SUBSTRING(col, 23), -- convert from PDT
'+00:00') -- convert to UTC time
这个答案做了两件事。首先,调用 STR_TO_DATE
将 PayPal 时间戳转换为合法的 MySQL 日期时间。如果你不关心时区,你可以在这里停下来。如果您确实关心时区,那么您还可以在时间戳上调用 CONVERT_TZ
将其从加利福尼亚夏令时转换为 UTC 时间。
Paypal IPN 正在返回一个 $_POST 负载,其中包括一个名为 payment_date
的日期时间项目。此变量的值采用以下格式:
23%3A54%3A48+Jul+23%2C+2016+PDT
这当然是urlencoded。我正在为数据库更新处理它,如下所示:
$payment_date = date( 'Y-m-d H:i:s', urldecode($_POST['payment_date']) );
这个最终的 $payment_date
变量是我稍后尝试使用 PDO 插入到我的 table 中的变量。但是,上述过程返回错误:
A non well formed numeric value encountered in /purchases/paypal_ipn.php on line 70
尽管有错误,插入仍在工作,但输入的日期不正确:
1970-01-01 00:00:00
在此之前,我只尝试了没有任何格式的 urldecode:
$payment_date = urldecode($_POST['payment_date']) );
这个允许数据库插入没有任何错误,但输入的值仍然不正确:
0000-00-00 00:00:00
这里有什么我遗漏的吗?
这是来自 PayPal 的解码时间戳:
23:54:48 Jul 23, 2016 PDT
这不是 MySQL 的标准格式,但您可以使用 STR_TO_DATE
和 CONVERT_TZ
的组合来转换它:
SELECT CONVERT_TZ(STR_TO_DATE(SUBSTRING(col, 1, 21), '%H:%i:%s %b %d, %Y'),
SUBSTRING(col, 23), -- convert from PDT
'+00:00') -- convert to UTC time
这个答案做了两件事。首先,调用 STR_TO_DATE
将 PayPal 时间戳转换为合法的 MySQL 日期时间。如果你不关心时区,你可以在这里停下来。如果您确实关心时区,那么您还可以在时间戳上调用 CONVERT_TZ
将其从加利福尼亚夏令时转换为 UTC 时间。