2017-08-08 73 views
0

我有日期是否是一个有效的日期(如1/1/2017)这个

new DateTime(date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($val))). 

一切工作正常,但如果我把一个日期如'30/2/2000'在Excel中,从上面的函数返回'1900-01-30 00:00:00.000000'. 有没有办法告诉该功能不转换,如果它不是有效的日期?

对于离,new DateTime返回FALSE如果该值不是有效的日期,但ExcelToPHP总是返回a date,我不需要这个。

===编辑===

显然,如果Excel单元格的格式为日期,我收到PHP中的值是一个数字:从01-01-1900经过的天数。对于无效的日期,它将以字符串形式返回值,而不是数字。

我觉得2个东西可以在这里工作:

  1. 检查,如果它是一个数字或字符串
  2. 转换成可读的PHP格式和验证结果

我选择第二种one:

$stringDate = \PHPExcel_Style_NumberFormat::toFormattedString($val, 'DD-MM-YYYY'); 

if (strtotime($stringDate) === false) { 
    // throw error or do something if is not a valid date 
} 

回答

0

您可以使用strtotime()方法检查日期,然后添加c根据条件违规

if(strtotime($val) === false) 
{ 
    //INVALID DATE 
} 
else 
{ 
    new DateTime(date($format = "Y-m-d", PHPExcel_Shared_Date::ExcelToPHP($val))); 
} 
+0

在Excel中,我有1/1/1980,在PHP中我收到29221.所以即使我有一个有效日期,strtotime也是假的。 –

+0

No @ taysia09 strtotime返回'1/1/1980'的时间戳。结果是:'315532800' –

+0

我刚试过。 $ val = 29221,所以它会是strtotime(29221)==> false –