Excel日期值检索为DD / MM / YY,如何将其格式化为YYYY-MM-DD?

时间:2015-11-27 03:24:58

标签: mysql excel codeigniter csv

在转换从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);             
           }

}

有什么建议吗?

2 个答案:

答案 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处理解决方案。