日期始终显示1970年1月1日

时间:2015-05-29 09:32:09

标签: php mysql codeigniter

这是我的模特

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

但是当我像这样输入时,它按预期格式化:

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

当我输入的日期超过0910时,似乎错误就开始了。

我做错了什么,如何解决?

3 个答案:

答案 0 :(得分: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 :(得分: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"
}

``

答案 2 :(得分: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-d而不是d/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已启用,那么您可能会收到错误

  

注意:

中遇到的格式错误的数值      

警告: DateTime :: createFromFormat()需要至少2个参数,1在

中给出      

致命错误:

中的非对象上调用成员函数format()

Check Docs