为什么所有日期字段都插入为1970-01-01

时间:2014-01-16 13:13:26

标签: php phpexcel

我正在使用PHP-EXEL库导入excel文件。一切正常,唯一的问题是excel文件包含 1970-01-01 的日期被导入到系统中。 我搜索了相关的主题,但没有任何帮助。

我正在使用strtotime(),但没有帮助。

我用来格式化日期字段的代码如下。

    $myarray[$j] = str_replace("-", "/",$myarray[$j]);
              echo $myarray[$j];// 31/07/2013

    $consult_date_arr=explode("/",$myarray[$j]);
            print_r($consult_date_arr);//Array ( [0] => 31 [1] => 07 [2] => 2013 ) 

    $myarray[$j]=date('Y-m-d',strtotime($consult_date_arr[0]));
          echo $myarray[$j];// 1970-01-01 


    $myarray[$j]=trim($myarray[$j]," ");

示例:31-07-2013插入为1970-01-01。

我错过了什么。 提前致谢

5 个答案:

答案 0 :(得分:2)

很可能$consult_date_arr[0]不符合您的想法。 strtotime失败并返回时间戳0(代表1970年1月1日)。

转储$consult_date_arr的内容并验证它是否包含strtotime可以消化的内容。

更新

$consult_date_arr=explode("/",$myarray[$j]);
        print_r($consult_date_arr);//Array ( [0] => 31 [1] => 07 [2] => 2013 ) 

$myarray[$j]=date('Y-m-d',strtotime($consult_date_arr[0]));
      echo $myarray[$j];// 1970-01-01

您正在将值31传递给strtotime,这确实要求在1970年1月1日午夜过后31秒的时间戳。您根本不应该爆炸它,只是致电strototime($myarray[$j])

根据这些日期字符串的来源,您可能会感到困惑strtotime(即,它应该如何解释7/8/2013 ..是7月8日还是8月7日? )

更新x2

来自strtotime的PHP手册:

  

通过查看,可以消除m / d / y或d-m-y格式的日期   各个组件之间的分隔符:如果分隔符是a   斜线(/),然后是美国m / d / y;而如果   separator是短划线( - )或点(。),然后是欧洲d-m-y格式   假定。

答案 1 :(得分:2)

为什么不直接尝试strtotime()然后使用date()格式化?不要替换/爆炸$ myarray上的任何内容,只需对数组的每个元素使用此行:

$myarray[$j] = date('Y-m-d',strtotime($myarray[$j]));

我希望它有所帮助!

答案 2 :(得分:1)

嘿,不需要将' - '替换为'/'。

直接使用。

  $myarray[$j] = str_replace("-", "/",$myarray[$j]);
  $myarray[$j]=trim($myarray[$j]," ");

答案 3 :(得分:1)

这意味着您传递的日期格式错误....

e.g

Your database have dd-mm-yyyy format and you are trying to pass data in mm-dd-yyyy format...

总之,你传递错误的日期格式

谢谢

答案 4 :(得分:1)

试试这个。这对你有用。您不需要strtotimedate个功能。

$myarray[$j] = str_replace("-", "/",$myarray[$j]);
          echo $myarray[$j];// 31/07/2013

$consult_date_arr=explode("/",$myarray[$j]);
        print_r($consult_date_arr);//Array ( [0] => 31 [1] => 07 [2] => 2013 ) 
//you have all the components so no need to convert to time and back to string
$myarray[$j]="{$consult_date_arr[2]}-{$consult_date_arr[1]}-{$consult_date_arr[‌​0]}";
      echo $myarray[$j];// should be 2013-07-31


$myarray[$j]=trim($myarray[$j]," ");