这是我的模型
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
或更多。
我做错了什么,我该如何解决?
你有一个额外的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"
}
"
将/
替换为-
:
<?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']);
这是因为你在代码中创建了错误的格式
$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将其转换为时间戳,而不是使用它作为
$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()
检查文档