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:
- überprüfen, ob es sich um eine Zahl oder eine Zeichenfolge
- 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
}
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. –
Nein @ taysia09 strtotime Rückgabe Zeitstempel für '1/1/1980'. Ergebnis ist: '315532800' –
Ich habe es gerade versucht. $ val = 29221, also wird es strtotime (29221) ==> false –