我正在使用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。
我错过了什么。 提前致谢
答案 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)
试试这个。这对你有用。您不需要strtotime
和date
个功能。
$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]," ");