2017-08-08 101 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 –