php格式日期1970年以前,从MySQL插入
我正在从CSV文件导入数据,其中一列有日期列表。其中一些日期在1970年之前。例如,日期为1956年3月10日 我在将这些日期格式化为可以插入MySQL的格式时遇到了一个问题 如果我用这个php格式日期1970年以前,从MySQL插入,php,datetime,fgetcsv,Php,Datetime,Fgetcsv,我正在从CSV文件导入数据,其中一列有日期列表。其中一些日期在1970年之前。例如,日期为1956年3月10日 我在将这些日期格式化为可以插入MySQL的格式时遇到了一个问题 如果我用这个 $date = DateTime::createFromFormat('d/m/Y', $col[8]); 我收到了这个错误消息 对非对象调用成员函数format() 但如果我硬编码这样的日期,它会起作用 $date = DateTime::createFromFormat('d/m/Y', '21/03/
$date = DateTime::createFromFormat('d/m/Y', $col[8]);
我收到了这个错误消息
对非对象调用成员函数format()
但如果我硬编码这样的日期,它会起作用
$date = DateTime::createFromFormat('d/m/Y', '21/03/1966');
这是完整的代码
$inputFileName = 'data.csv';
if (($handle = fopen($inputFileName, "r")) !== FALSE) {
fgetcsv($handle);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
for ($i = 0; $i < $num; $i++) {
$col[$i] = $data[$i];
}
try {
$date = DateTime::createFromFormat('d/m/Y', trim($col[8]));
}
catch (Exception $e) {
echo $e->getMessage();
exit(1);
}
echo $date->format("Y-m-d");
}
fclose($handle);
}
$inputFileName='data.csv';
if($handle=fopen($inputFileName,“r”)!==FALSE){
fgetcsv($handle);
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
$num=计数($data);
对于($i=0;$i<$num;$i++){
$col[$i]=$data[$i];
}
试一试{
$date=DateTime::createFromFormat('d/m/Y',trim($col[8]);
}
捕获(例外$e){
echo$e->getMessage();
出口(1);
}
echo$日期->格式(“Y-m-d”);
}
fclose($handle);
}
您不能保证CSV文件中会存在所有字段,因此您必须进行一些控制
define('DATE_COLUMN', 8);
// @Warning : avoid hard coding file name !
$inputFileName = 'data.csv';
if (($handle = fopen($inputFileName, "r")) !== FALSE) {
fgetcsv($handle);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
for ($i = 0; $i < $num; $i++) {
$col[$i] = $data[$i];
}
$dateString = NULL;
if (isset($col[DATE_COLUMN]) &&
strlen(trim($col[DATE_COLUMN])) > 0) {
$dateString = trim($col[DATE_COLUMN]);
}
if (is_null($dateString)) {
// print log or throw an exception if you want
}
else {
try {
$date = DateTime::createFromFormat('d/m/Y', dateString);
echo $date->format("Y-m-d");
}
catch (Exception $e) {
echo $e->getMessage();
exit(1);
}
}
}
fclose($handle);
}
define('DATE\u COLUMN',8);
//@警告:避免硬编码文件名!
$inputFileName='data.csv';
if($handle=fopen($inputFileName,“r”)!==FALSE){
fgetcsv($handle);
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
$num=计数($data);
对于($i=0;$i<$num;$i++){
$col[$i]=$data[$i];
}
$dateString=NULL;
if(isset($col[日期列])和
strlen(修剪($col[日期列])>0){
$dateString=trim($col[DATE_COLUMN]);
}
if(为null($dateString)){
//如果需要,打印日志或引发异常
}
否则{
试一试{
$date=DateTime::createFromFormat('d/m/Y',日期字符串);
echo$日期->格式(“Y-m-d”);
}
捕获(例外$e){
echo$e->getMessage();
出口(1);
}
}
}
fclose($handle);
}
检查您的CSV,并确保$col[8]
的所有内容都是有效日期(我认为必须在1901年之后)。字符串可能重复。您确定字符串的日期格式正确吗?例如,如果打印$col[8]并将其与$col[7]进行比较。考虑到格式,它们是否相等?你确定$col[8]
总是存在吗?@apokryfos我认为任何非负数都可以。