Когато използвате strotime()
трябва да се уверите, че използвате валиден формат за дата и час
. В противен случай strtotime()
ще върне false
или ви дава неочаквана стойност.
Приема се, че датите, които използват формат XX/XX/XXXX, са в американски формат, което означава, че първите две цифри представляват месеца, следващите две цифри представляват деня от месеца, а последните четири цифри представляват годината. Когато се използват тирета, се приема, че датите са в европейски формат. Например:
04/18/2017 = April 18, 2017
12/18/2017 = December 18, 2017
18-04-2017 = April 18, 2017
18-12-2017 = December 18, 2017
Ако случайно смените деня и месеца strtotime()
ще върне false, тъй като датата е невалидна.
18/04/2017 // error
18/12/2017 // error
04-18-2018 // error
12-18-2017 // error
Горните примери са направо. Но можете да срещнете проблеми, когато датите могат да бъдат двусмислени. Например:
04/12/2017 = April 12, 2017
12/04/2017 = December 4, 2017
04-12-2017 = December 4, 2017
12-04-2017 = April 12, 2017
В горните примери чрез превключване на ден и месец ние все още получаваме валидни дати, което може да доведе до неочаквани резултати във вашето приложение. За да разрешите тези потенциални проблеми, се препоръчва да използвате DateTime::createFromFormat()
за да анализирате рекламата с дата, върнете DateTime()
обект, от който можете да получите Unix Timestamp
, конвертирайте датата в друг формат
, или го използвайте за сравнение с други DateTime
обекти.
// 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');
Вижте също:
- Сравнете DateTime в обектите на PHP с оператор за сравнение на PHP
За вашия конкретен случай следният код ще работи:
$date = $date1 = DateTime::createFromFormat('m/d/Y', '20/02/2000');
$D->query = $date->format('Y-m-d'); // 2000-02-20