2017-08-06 90 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

相關問題