在转换从Excel工作表中检索的日期时,年份将被插入为20XX而不是19xx。
点击excel表格中的单元格,我们可以知道年份并且显示正确,但插入时19xx正在插入为20xx。
当我回复从excel表中检索到的日期时 -
echo date('Y-m-d', strtotime($data[3]));
exit(); //output 1970-01-01
echo $data[3];
exit(); //output 22/11/66
我尝试了以下方法 -
1. $dob=date('Y-m-d', strtotime(str_replace('/', '.', $data[3])));
输出 - 有些年份是正确的,但有些19xx显示为20xx
示例 - 2066-11-22
代替1966-11-22
2. $dob = implode('-', array_reverse(explode('/', $data[3])));
输出-YY-MM-DD
3. $dob=date('Y-m-d', strtotime(str_replace('/', '-', trim($data[3]))));
输出 - 1970-01-01
在模型中从excel中检索数据 -
function upload(){
ini_set('auto_detect_line_endings',TRUE);
/* if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
readfile($_FILES['userfile']['tmp_name']);
}*/
if (($handle = fopen($_FILES['userfile']['tmp_name'], "r")) !== FALSE) {
$firstRow = true;
while (($data = fgetcsv($handle, 4096, ",",'"')) !== FALSE)
{
$num = count($data);
if($data[0]!=""){
//echo implode('-', array_reverse(explode('/', $data[3])));exit();
if($data[3]!="")
{
//$dob=date('Y-m-d', strtotime(str_replace('/', '.', $data[3])));
//$dob=date("Y-m-d", strtotime($data[3]));
//$dob = implode('-', array_reverse(explode('/', $data[3])));
//$dob=date("Y-m-d", strtotime($date));
$dob=date('Y-m-d', strtotime(str_replace('/', '-', trim($data[3]))));
}
$data1 = array(
'member_name' => $data[1],
'member_phone' => $data[2],
'member_dob' => $dob,
'member_outlet' => $data[4]
);
//echo "<pre/>";print_r($data) ;exit();
$this->db->insert('member_info', $data1);
$member_id = $this->db->insert_id();
}
}
//echo "<pre/>";print_r($data) ;exit();
fclose($handle);
}
ini_set('auto_detect_line_endings',FALSE);
}
}
有什么建议吗?
答案 0 :(得分:1)
我认为以下代码非常糟糕 - 我宁愿尝试更改Excel电子表格的日期格式 - 但它适用于您提供的示例日期:
$data[3] = '22/11/66';
$arr = explode('/', $data[3]);
$dob = date("Y-m-d", strtotime('19' . $arr[2] . '/' . $arr[1] . '/' . $arr[0]));
echo var_dump($dob);
似乎PHP在1970年之前处理两位数的问题是一个问题。使用PHP documentation中的dd.mm.yy格式的示例日期我得到了...
$dob = date("Y-m-d", strtotime("30.6.08"));
echo var_dump($dob); // 2008-06-30
$dob = date("Y-m-d", strtotime("30.6.66"));
echo var_dump($dob); // 1970-01-01
$dob = date("Y-m-d", strtotime("30.6.1966"));
echo var_dump($dob); // 1966-06-30
我需要添加&#34; 19&#34;到两位数的年份,以了解当年的情况。
答案 1 :(得分:0)
我遇到了与上述相同的问题,
但是而不是在php端进行处理,我所做的是将excel文件列的数据类型更改为text
代替了date
。 < / p>
现在我在php方面所做的一切与往常一样:
<?php
$date = date("Y-m-d", strtotime($excel_date));
//here you can insert it in your db table if you want.
?>
但是,如果您无法控制要上传的excel文件,请使用上述php处理解决方案。