2013-08-26 4 views
1

저는 CodeIgniter 2.1.x와 MySQL을 사용하고 있습니다.
mysql 열 유형 DATETIMETIMESTAMP을 사용하는 사이에 많은 조언을 찾았지만 어떤 빌드를 실제로 사용하고 있는지 확실하지 않습니다.MySQL과 PHP에서 날짜와 시간을 처리하는 방법은 무엇입니까?

나는 사용자가 <form></form>을 통해 Google지도에 마커를 추가 할 수있는 애플리케이션이 있습니다. 각 마커 제출 후 는 현재 시간이 기능을 사용하여 일일를 +해야 MySQL의 칼럼 date_createddate_end 기록해야합니다

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()); 
     } 
     ... 
    } 

} 

을하지만 I'am과 같이 설정 열 유형을 사용할 때 제대로 업데이트되지 않습니다 TIMESTAMP 또는 DATETIME.

내가 뭘 잘못하고 있는거야?

+1

도움이 될만한 이전 게시물 : http://stackoverflow.com/questions/409286/datetime-vs-timestamp – Revent

답변

0

now() 기능은 (는 바닐라 PHP를하지 않습니다) CodeIgniter의에있는 경우, 다음 출력은 다음과 같은 형식 일치의 확인 : 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',이 형식 (타임 스탬프)으로 데이터를 저장하고 싶지만, 그냥 그대로 두지는 않습니다. 나는 항상 이것을 'markerers.date_end'에 가지고 있습니다 ->'0000-00-00 00:00 : 00' 열의 유형이 'TIMESTAMP'로 설정되어 있더라도 ...? 링크를 이용해 주셔서 감사합니다. 현재 – aspirinemaga

+0

btw입니다. 제공, 나는 이미 그것을 시도하고, 현재 작업, 나는 다른 곳에서 제안 된대로 일을하면서 데이터를 업데이트하지 않기 때문에 문제가 어딘가에 MySQL의 처리라고 생각한다. – aspirinemaga

+0

나는 이것을 당신의 대답에 추가하고 싶다. 게시물을 업데이트하면 받아 들일 수 있습니다. PHP 방식 대신 MySQL을 사용하여 작업했습니다 (http://stackoverflow.com/questions/3887509/mysqls-now-1-day). – aspirinemaga

0

또한 의존 할 수 있다면, 그것의 형식을 확인합니다. 한 사용자가 호주에서 어떤 일을한다고 말하면 미국의 다른 사용자가 그 일을 볼 필요가 있다면 사용자의 개별 시간대와 관련하여 datetime을 저장해야합니다.

문제가되지 않는다면 문제가 없습니다.

$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')); 
관련 문제