【问题标题】:Event datetime is being stored incorrectly in mysql事件日期时间在 mysql 中存储不正确
【发布时间】:2012-09-13 19:06:09
【问题描述】:

事件 'start_time' 被错误地存储到 mysql 数据库中。

错误存储的事件

https://graph.facebook.com/112797205532177 - 存储为 2012-10-12 19:00:00
正确的是 2012-10-13

{
"id": "112797205532177", 
"owner": {
    "name": "MUST...NOT...KILL", 
    "category": "Musician/band", 
    "id": "108837005801452"
}, 
"name": "METAL MEOWLISHA", 
"description": "W/ Brutailty", 
"start_time": "2012-10-13", 
"location": "The brass mug", 
"venue": {
    "id": "151496721577181"
}, 
"privacy": "OPEN", 
"updated_time": "2012-07-27T21:20:20+0000"
}

https://graph.facebook.com/278345158937377 - 存储为 2012-11-18 18:00:00
正确的是 2012-11-19

{
"id": "280381075399709", 
"owner": {
    "name": "Lamb of God", 
    "category": "Musician/band", 
    "id": "9008741434"
}, 
  "name": "Lamb of God On Tour", 
  "description": "Wed/Oct-31\tLos Angeles, CA @ TBA\t", 
  "start_time": "2012-10-31", 
  "privacy": "OPEN", 
  "updated_time": "2012-09-05T21:37:29+0000"
}

我一直在网上搜索解决方案。没有运气

目标是存储确切的字段“start_time”而不进行转换。我的代码中没有转换。我认为这与 php 设置有关

编辑:添加从图形 api 返回的结果,这是我的插入字符串(在 codeigniter 中

$eventdata = array(
            'artists_name'=>$artists,
            'event_status'=>$event_stat,
            'formatted_datetime'=>$formatted_datetime,
            'formatted_location'=>$formatted_location,
            'event_id'=>$event_id,
            'venue_name'=>$venue_name,
            'venue_city'=>$vcity,
            'venue_region'=>$vstate,
            'venue_country'=>$vcountry,
            'venue_lat'=>$vlat,
            'venue_long'=>$vlong,
            'date_time'=>$date_time,
            'rsvp_url'=>$rsvp_url,
            'ticket_url'=>$ticket_url,
            'updated'=>$updated);
            $eventinsert = $this->db->insert_string('newEvents',$eventdata);
            $this->db->query($eventinsert);

谢谢

编辑这是完整的 php 文件

include 'facebook.php';

$facebook = new Facebook(array(
  'appId'  => 'xxxxxxxxxxxxxxx',
  'secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
));


$check = $facebook->api('278345158937377');
print_r ($check['start_time']);

?>

到目前为止,我尽可能地剥离了一切。我觉得奇怪的是字符串结果会在显示之前自动转换。

facebook 网站上的图表和 fql 显示 2012-11-19 我的网站显示 2012-11-18

【问题讨论】:

  • 我不知道您从哪里获得start_time 以及您如何将其插入数据库...
  • 如何检索日期?你如何将它存储在 PHP 中?在 MySQL 中是如何存储的?
  • 你能发布 facebook graph API 返回的内容吗?没有您的访问密钥,我们无法看到返回的数据。我们也看不到您正在执行的实际 MySQL INSERT 命令。从您有限的描述来看,听起来您遇到了时区问题。
  • 通过 facebooks php sdk 检索日期并存储在 mysql 中

标签: php mysql facebook datetime facebook-php-sdk


【解决方案1】:

将 GMT 偏移量添加到时间并存储它。

例子:我在EST,时差5小时,所以unix时间戳加18000

【讨论】:

    【解决方案2】:

    您的应用是否启用了Events Timezone 迁移?

    当我使用未启用迁移的应用生成的访问令牌查询事件 278345158937377 时,Facebook 返回 "start_time": "2012-11-19T01:00:00"

    当我从启用了时区迁移的应用中创建它时,API 调用返回"start_time": "2012-11-19"

    尝试从应用仪表板的高级选项卡启用此迁移,看看是否能解决您的问题。

    【讨论】:

    • 我在应用仪表板中启用了该设置。运行脚本一次..有些似乎是正确的。 facebook 确实说传播所有服务器可能需要几分钟。
    • 当我从图形 api 工具中检查时。他们都是正确的。他们只是没有正确存储在 mysql 中
    • Graph API 工具为“Graph API Explorer”访问令牌启用了迁移。使用右上角的“应用程序”下拉菜单更改您的应用访问令牌,看看是否得到相同的结果。
    • 您也不应该相信 Graph API 的脚本结果。 print_r() 你的结果并确保它符合你的期望。
    • 选中我的应用后检查图形 api 结果。相同的结果.. 现在检查 print_r 结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多