Når du bruger strotime()
du skal sikre dig, at du bruger et gyldigt datetime-format
. Ellers strtotime()
vil returnere false
eller give dig en uventet værdi.
Datoer, der bruger formatet XX/XX/XXXX, antages at være i amerikansk format, hvilket betyder, at de to første cifre repræsenterer måneden, de næste to cifre repræsenterer dagen i måneden, og de sidste fire cifre repræsenterer året. Når der bruges bindestreger, antages datoerne at være i europæisk format. For eksempel:
04/18/2017 = April 18, 2017
12/18/2017 = December 18, 2017
18-04-2017 = April 18, 2017
18-12-2017 = December 18, 2017
Hvis du ved et uheld skifter dag og måned strtotime()
vil returnere falsk, da datoen er ugyldig.
18/04/2017 // error
18/12/2017 // error
04-18-2018 // error
12-18-2017 // error
Ovenstående eksempler er ligetil. Men du kan løbe ind i problemer, når datoerne kan være tvetydige. For eksempel:
04/12/2017 = April 12, 2017
12/04/2017 = December 4, 2017
04-12-2017 = December 4, 2017
12-04-2017 = April 12, 2017
I ovenstående eksempler får vi stadig gyldige datoer ved at skifte dag og måned, som kan forårsage uventede resultater i din ansøgning. For at løse disse potentielle problemer anbefales det at bruge DateTime::createFromFormat()
for at parse datoannoncen returnerer en DateTime()
objekt, hvorfra du kan få et Unix-tidsstempel
, konvertere datoen til et andet format
, eller brug den til at sammenligne med andre DateTime
genstande.
// Parse US date format
$date1 = DateTime::createFromFormat('m/d/Y', '04/18/2017');
// Get Unix timestamp of 1493581268
$timestamp = $date1->getTimestamp();
// Parse European date format
$date2 = DateTime::createFromFormat('d-m-Y', ''18-04-2017);
// Get MySQL format (ISO-8601) of 2017-04-18
$mysqlDate = $date2->format('Y-m-d');
Se også:
For dit specifikke tilfælde vil følgende kode virke:
$date = $date1 = DateTime::createFromFormat('m/d/Y', '20/02/2000');
$D->query = $date->format('Y-m-d'); // 2000-02-20