这是我的模特
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-01
,1992-05-02
,1992-05-03
等,直到1992-05-09
。
当我输入的日期超过09
或10
时,似乎错误就开始了。
我做错了什么,如何解决?
答案 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()