php - 无法将 PayPal IPN 返回的日期时间值输入到 MySQL 表中

标签 php mysql paypal-ipn

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 插入到我的表中的内容。但是,上述过程返回错误:

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_DATECONVERT_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 时间。

关于php - 无法将 PayPal IPN 返回的日期时间值输入到 MySQL 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38549746/

相关文章:

php - 为什么set_error_handler不排除不是error_types的错误?

php - CakePHP、jQuery - 将数据属性添加到 anchor

javascript - 带有 AJAX 和 DOM 处理 API 的下拉菜单

javascript - Php 值在外部 jquery 脚本中不起作用

java - 我的 Like Query JDBC(Derby) 有什么问题

php - 我如何将这个巨大的分割查询变成一个查询

php - mysql简单查询+if

php - Paypal 返回 url 不适用于 php 和 html 表单

PHP执行命令 "at"运行SQL查询问题

wordpress - 在带有 Paypal 附加功能的 Wordpress Gravity Forms 上使用 Paypal 帐户付款