Dlaczego porównanie mniej niż lub więcej niż w PHP dwóch ciągów w formacie daty „RRRR-MM-DD” działa, mimo że są to łańcuchy?

Pracuję nad częścią kodu PHP dla projektu, który porównuje datę w formacie RRRR-MM-DD z bieżącą datą, aby sprawdzić, czy jest ona mniejsza niż bieżąca data. W różnych punktach kodu zastosowano dwa różne sposoby dokonywania tego porównania. Pierwszy użytyget_timestamp() w datach i przeprowadziłem porównanie znaczników czasu. W innym miejscu po prostu porównał ciąg daty do wyjściadate("Y-m-d"). Oczekiwałem, że porównanie dwóch ciągów dat nie zapewni prawidłowej odpowiedzi. Kiedy jednak ustawiłem kilka przypadków testowych, otrzymałem oczekiwane wyjście. Przejrzałem dwie części podręcznika PHP w celu uzyskania wglądu i wciąż jestem zdezorientowany, dlaczego porównanie działa bez konwersji na znacznik czasu.

Theoperatory porównania część podręcznika PHP stwierdza, że ​​ciągi są albo konwertowane na liczby, a następnie dokonywane jest porównanie numeryczne, albo sprawia, że ​​coś nazywa się porównaniem leksykalnym. Nie mogłem znaleźć nic więcej na temat porównań leksykalnych, ale kiedy o nich czytałemkonwersja napisów na liczby i wypróbowałem przykłady używające łańcuchów dat Otrzymuję to samo wyjście liczbowe dla każdego łańcucha daty, który próbuję.

Czy ktoś może mi pomóc zrozumieć, dlaczego porównanie dwóch lub więcej ciągów dat działa (lub przynajmniej wydaje się działać)? czego mi brakuje?

Kontynuując, jeśli naprawdę działa, zakładam, że lepiej jest przekonwertować datę na znacznik czasu i wykonać porównanie na podstawie znacznika czasu. Jaka jest lepsza funkcja do konwersji daty na znacznik czasu:get_timestamp() lubstrtotime()?

Przykładowy kod mniejszy niż / więcej niż porównanie dwóch ciągów RRRR-MM-DD:

if ("2013-06-27" < "2013-06-28") { echo "less"; } // Output: less
if ("2013-06-27" > "2013-06-28") { echo "more"; } // Output: (none)

if ("2013-06-29" < "2013-06-28") { echo "less"; } // Output: (none)
if ("2013-06-29" > "2013-06-28") { echo "more"; } // Output: more

Przykładowy kod testujący wartość liczbową przekonwertowanego ciągu RRRR-MM-DD

$foo = 1 + "2013-06-27";
echo "\$foo==$foo"; // Output: $foo = 2014
$foo = 1 + "2013-06-28";
echo "\$foo==$foo"; // Output: $foo = 2014
$foo = 1 + "2013-06-29";
echo "\$foo==$foo"; // Output: $foo = 2014

questionAnswers(2)

yourAnswerToTheQuestion