2017-08-08 1 views
0

Ich habe dieses

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

Alles funktioniert gut, wenn das Datum ein gültiges Datum ist (wie 1/1/2017), aber wenn ich ein setzen Datum wie '30/2/2000' in Excel, gibt die Funktion von oben zurück '1900-01-30 00:00:00.000000'. Gibt es eine Möglichkeit zu sagen, dass die Funktion nicht konvertieren, wenn es kein gültiges Datum ist?

Für ex, new DateTime kehrt FALSE, wenn der Wert kein gültiges Datum ist, aber ExcelToPHP immer wieder a date und ich brauche das nicht.

=== === EDIT

Anscheinend, wenn die Excel-Zelle als Datum formatiert ist, der Wert I in PHP erhalten eine Zahl: die Anzahl der Tage, die von 01-01-1900 weitergegeben. Bei einem ungültigen Datum wird der Wert als Zeichenfolge und nicht als Zahl zurückgegeben.

Ich denke, zwei Dinge können hier arbeiten:

  1. überprüfen, ob es sich um eine Zahl oder eine Zeichenfolge
  2. in ein lesbares PHP-Format konvertieren und validieren, dass Ergebnis

wähle ich die zweite ein:

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

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

Antwort

0

Sie Datum strtotime() Methode überprüfen dann c hinzufügen Onversation nach Bedingung

+0

In Excel habe ich 1/1/1980, in PHP bekomme ich 29221. Also wird strtotime falsch sein, auch wenn ich ein gültiges Datum habe. –

+0

Nein @ taysia09 strtotime Rückgabe Zeitstempel für '1/1/1980'. Ergebnis ist: '315532800' –

+0

Ich habe es gerade versucht. $ val = 29221, also wird es strtotime (29221) ==> false –