2017-08-06 89 views
0

我已经在WordPress中编写了一个操作,它从表格中获取行并以JSON格式对其进行编码,因此可以将它们与FullCalendar javascript事件日历。将日期时间从MySQL表格转换为ISO8601,以在WordPress中创建JSON订阅源,以便与FullCalendar一起使用

表中的日期字段需要格式化为ISO8601。

换句话说,当数据库呈现日期/时间:2017-08-06 10:22:20时,我需要它在查询后将其转换为:2017-08-06T10:22:20作为日期字段在查询中。

我不关心时区偏移量。

我的功能:

add_action('getmyevents', 'get_my_events'); 
function get_my_events($atts = [], $content = null) { 

    // Use WordPress database functions 
    global $wpdb; 

    // List of events will be stored in JSON format 
    $json = array(); 

    // Query retrieves list of events 
    $mytable = $wpdb->prefix . "my_events"; 
    $myids = $wpdb->get_results("SELECT * FROM " . $mytable); 

    // sending the encoded result to success page 
    echo json_encode($myids, JSON_UNESCAPED_SLASHES); 

    // return JSON 
    return $json; 
} 

能有人给我一个快速,直接的方式于日期字符串转换查询到ISO8601?

+0

我认为这是你正在寻找的答案。 https://stackoverflow.com/a/813265/3868097 – Mark

+0

我尝试了你的建议,但是当我这样做时我收到了错误。我真正希望的是在检索查询后编辑数据的一种方法。对不起,我不清楚这一点。 – sanitycheck

回答

0

也许你可以尝试这样的事情。

虽然我不知道你的专栏名称。取消注释print_r以获取列名称。

foreach ($myids as $key => $row) { 
    // print_r($row); 
    $date_reformatted = strtotime($row->date_col); 
    $myids[$key]->date_col = date('c', $date_reformatted); 
} 
+0

有趣的想法。不幸的是,$ date_reformatted = strtotime($ row-> date_col);产生一个错误,“PHP可捕捉的致命错误:class stdClass的对象无法转换为XX行中的字符串” – sanitycheck

+0

顺便说一句,目前有六列,尽管更多将很快添加,如果代码很好可以自动适应任何新的列。目前有两个日期时间列:开始(日期时间)和结束(日期时间)。其他四列是id(int),title(varchar),url(varchar)和allDay(varchar)。 – sanitycheck

0

这不是我寻找的理想答案,但我确实想出了一个工作解决方案。 Mark在查询过程中提出的过滤建议为我提供了所需的线索。

add_action('getmyevents', 'get_my_events'); 
function get_my_events($atts = [], $content = null) { 
    global $wpdb; 
    // Values sent via ajax to calendar from my_events table 

    // List of events 
    $json = array(); 

    // Query that retrieves events 
    $mytable = $wpdb->prefix . "my_events";   
    $myids = $wpdb->get_results('SELECT id, title, url, DATE_FORMAT(start, "%Y-%m-%d\T%H:%i:%s") as start, DATE_FORMAT(end, "%Y-%m-%d\T%H:%i:%s") as end, allDay FROM ' . $mytable); 


    // sending the encoded result to success page 
    echo json_encode($myids, JSON_UNESCAPED_SLASHES); 

    // return JSON 
    return $json; 
} 

但是,如果有人能想出不需要我的名字来指定列的答案,那将是巨大的。更好的方法是根本不在查询中格式化,而是在之后进行格式化。我总是希望尽可能地减少MySQL使用处理器的次数。

+0

我认为你可以使用table_name。*,date,它会给你所有的列以及你想添加的日期。另外,如果你告诉我print_r的输出,我可以帮助你获得该PHP代码的工作。 – Mark

相关问题