Exceldate值检索为DD / MM / YY,如何格式化为YYYY-MM-DD?

在转换从Excel表中检索的date年插入20XX而不是19xx。

单击Excel工作表中的单元格,我们可以知道年份,并显示正确,但在插入19xx被插入为20xx。

当我回声从Excel表格检索datelike-

echo date('Ym-d', strtotime($data[3])); exit(); //output 1970-01-01 echo $data[3]; exit(); //output 22/11/66 

我尝试了以下方法 –

 1. $dob=date('Ym-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('Ym-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('Ym-d', strtotime(str_replace('/', '.', $data[3]))); //$dob=date("Ymd", strtotime($data[3])); //$dob = implode('-', array_reverse(explode('/', $data[3]))); //$dob=date("Ymd", strtotime($date)); $dob=date('Ym-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); } } 

有什么build议么?

我认为下面的代码是可怕的 – 我宁愿尝试更改Excel电子表格的date格式 – 但它适用于您给出的示例date:

 $data[3] = '22/11/66'; $arr = explode('/', $data[3]); $dob = date("Ymd", strtotime('19' . $arr[2] . '/' . $arr[1] . '/' . $arr[0])); echo var_dump($dob); 

似乎在1970年以前如何处理两位数字的问题有一个问题。从PHP文档中以dd.mm.yy格式使用示例date,我得到…

 $dob = date("Ymd", strtotime("30.6.08")); echo var_dump($dob); // 2008-06-30 $dob = date("Ymd", strtotime("30.6.66")); echo var_dump($dob); // 1970-01-01 $dob = date("Ymd", strtotime("30.6.1966")); echo var_dump($dob); // 1966-06-30 

我需要在两位数的年份中加上“19”,以便了解年份。