2015-05-29 79 views
2

这是我的模型日期总是显示01 1970年1月

function insert_employee($data) { 
    $query = $this->db->insert($this->table, $data); 
    return $this->db->affected_rows(); 
} 

这是我的控制器

function save_header() { 
    if (!IS_AJAX) { 
     display_nonajax_stop(); 
     exit; 
    } else { 
     $data = $this->input->post(); 
     $data = nullify_array($data); 

     if ($data['emp_isretire'] == 'N') { 
      $data['emp_retiredate'] = NULL; 
     } 

     $check = $this->m_employee->get_employee_row(array("emp_id" => $data['emp_id'])); 

     if ($check) { 
      $result['message'] = "ID already exist. Please provide other ID"; 
      $result['status'] = 0; 
      echo json_encode($result); 
      die(); 
     } 

     $data['emp_opid'] = $this->session->userdata('usr_name'); 
     $data['emp_update'] = date("Y-m-d H:i:s"); 
     $data['emp_birthdate'] = DateTime::createFromFormat(strtotime('Y-m-d', $data['emp_birthdate'])); 
     $data['emp_dtentry'] = DateTime::createFromFormat(strtotime('Y-m-d', $data['emp_dtentry'])); 
     $data['emp_dtprobation'] = DateTime::createFromFormat(strtotime('Y-m-d', $data['emp_dtprobation'])); 
     $data['emp_dtpermanent'] = DateTime::createFromFormat(strtotime('Y-m-d', $data['emp_dtpermanent'])); 
     $data['emp_dtleaving'] = DateTime::createFromFormat(strtotime('Y-m-d', $data['emp_dtleaving'])); 
     $data['emp_retiredate'] = DateTime::createFromFormat(strtotime('Y-m-d', $data['emp_retiredate'])); 

     $q = $this->m_employee->insert_employee($data); 

     $result = array(); 
     if ($q > 0) { 
      $result['message'] = "Data has been saved"; 
      $result['status'] = 1; 
     } else { 
      $result['message'] = "Database operation fail"; 
      $result['status'] = 0; 
     } 
     echo json_encode($result); 
    } 
} 

我不知道我是不是错了,它开始返回到1970至01年-01当输入是这样的:

1992-05-11

但格式如预期WH输入如下:

1992-05-011992-05-02,1992-05-03等,直到1992-05-09

看起来像错误开始时,我输入日期超过0910或更多。

我在做什么错,我该如何解决?

+0

什么是你有望走出来的'$ data'阵列。 –

+0

你可以发布你的变量的值,如$ data ['emp_birthdate']' –

+0

@anantkumarsingh任何日期超过10日,总是显示1970-01-01如果我把日期放在10日以下,它就会正常显示。 –

回答

0

它,因为你创建你的代码

内的格式错误
$data['emp_birthdate'] = DateTime::createFromFormat('d/m/Y', $data['emp_birthdate']); 
                 ^^^^^^ 

应该

$data['emp_birthdate'] = DateTime::createFromFormat('Y-m-d', $data['emp_birthdate']); 
                ^^^^^^ 

如果你的日期是1992-05-11那么你的日期格式Y-m-dd/m/Y

编辑

它,因为你是它使用的strtotime转换成的timeStamp,而不是你需要用它作为

$data['emp_birthdate'] = DateTime::createFromFormat(strtotime('Y-m-d', $data['emp_birthdate'])); 
                ^^^^^^^^^^        ^^ 

应该

$data['emp_birthdate'] = DateTime::createFromFormat('Y-m-d', $data['emp_birthdate']); 

如果您error_reporting是,那么你可能会得到一个错误

Notice: A non well formed numeric value encountered in

Warning: DateTime::createFromFormat() expects at least 2 parameters, 1 given in

Fatal error: Call to a member function format() on a non-object in

Check Docs

1

-更换/

<?php 

$data['emp_birthdate'] = DateTime::createFromFormat('d-m-Y', $data['emp_birthdate']); 
$data['emp_dtentry'] = DateTime::createFromFormat('d-m-Y', $data['emp_dtentry']); 
$data['emp_dtprobation'] = DateTime::createFromFormat('d-m-Y', $data['emp_dtprobation']); 
$data['emp_dtpermanent'] = DateTime::createFromFormat('d-m-Y', $data['emp_dtpermanent']); 
$data['emp_dtleaving'] = DateTime::createFromFormat('d-m-Y', $data['emp_dtleaving']); 
$data['emp_retiredate'] = DateTime::createFromFormat('d-m-Y', $data['emp_retiredate']); 

正如你编辑您的问题新的答案是: -

$data['emp_retiredate'] = DateTime::createFromFormat('Y-m-d', $data['emp_retiredate']); 
1

你必须在所有的日线的额外strtotime(),你需要删除它,它会工作。

var_dump(DateTime::createFromFormat(strtotime('Y-m-d', '1992-05-11'))); 
-> bool(false) 

var_dump(DateTime::createFromFormat('Y-m-d', '1992-05-11')); 
-> object(DateTime)#1 (3) { 
    ["date"]=> 
    string(26) "1992-05-11 12:11:35.000000" 
    ["timezone_type"]=> 
    int(3) 
    ["timezone"]=> 
    string(13) "Europe/Berlin" 
} 

``

相关问题