2013-08-26 35 views
1

我使用的是CodeIgniter 2.1.x和MySQL。
我發現了很多使用mysql列類型DATETIMETIMESTAMP之間的建議,但我不確定哪個是真正正確的用於我想要構建的東西。如何在MySQL和PHP中處理日期和時間?

我有一個應用程序,其中用戶可以通過<form></form>添加標記到谷歌地圖。 每個標記提交後,當前時間應記錄爲MySQL的列date_createddate_end應該使用此功能+1天:

class Maps extends CI_Controller{ 
    ... 
    public function marker($action = NULL, $slug = 'marker_add'){ 
     ... 
     if($this->form_validation->run() == TRUE){ 
      $tomorrow = now() + 86400; 
      $data_markers = array(
       'tid'   => $this->input->post('formMarkType'), 
       'lat'   => $this->input->post('formMarkLat'), 
       'lng'   => $this->input->post('formMarkLng'), 
       'state'   => 1, 
       'description' => $this->input->post('formMarkDescription'), 
       'date_end'  => $tomorrow 
      ); 
      $this->map_model->markers_add($data_markers); 
      redirect(site_url()); 
     } 
     ... 
    } 

} 

但是,使用設置列類型,當我'它永遠不會更新正確TIMESTAMPDATETIME

任何建議我在這裏做錯了嗎?

+1

上一篇文章可能有幫助:http://stackoverflow.com/questions/409286/datetime-vs-timestamp – Revent

回答

0

如果笨存在now()功能(它不會對香草PHP),然後檢查它的輸出相匹配的格式如下:Y-m-d H:i:s,否則,這個問題可以幫助你:Inserting NOW() into Database with CodeIgniter's Active Record,也可以使用PHP standard date and time functions代替的now()

+0

是的,它的某種日期助手由ci提供,在執行'now()'時,這是輸出的'1377551478',我希望將數據存儲在這種格式(時間戳),但是,它只是不會讓它是,我一直在這個'markers.date_end' - >'0000-00-00 00:00: 00'即使列的類型設置爲'TIMESTAMP' ...?感謝您的鏈接,目前正在檢查它 – aspirinemaga

+0

順便說一句,你的鏈接提供的,我已經試了一下,它現在的工作,我認爲這個問題是某處MYSQL處理,因爲它只是不會更新,而這樣做是在另一篇文章 – aspirinemaga

+0

建議我想將它添加到你的答案中的數據,請考慮更新你的帖子,所以我可以接受它。我使用MySQL做的,而不是PHP路(http://stackoverflow.com/questions/3887509/mysqls-now-1-day) – aspirinemaga

0

它也可以,如果你在乎的時區靠。如果一個用戶在澳大利亞表示做了某些事情,而其他美國用戶需要看到該事情,那麼您需要將日期時間存儲在用戶個人時區的上下文中。

如果這不是你的問題,這將工作。

$dt = new DateTime ('+1 day' , new DateTimeZone('Australia/Hobart')); 
$tomorrow = $dt->format('Y-m-d H:i:s'); 

只使用最近的大陸/城市到您的服務器的時區。

如果您有不同時區的用戶。它可能是更好地保存在「UTC」時區的$日期時間(即新DateTimeZone(「UTC」),然後你就可以呈現在誰請求數據的用戶的用戶時區的日期時間。

例如,

$dt = new DateTime('stored datetime', new DateTimeZone('UTC')); 
$dt->setTimeZone(new DateTimeZone('users timezone'));