¿Por qué funciona una comparación menor o mayor que la comparación en PHP de dos cadenas en el formato de fecha de "YYYY-MM-DD", aunque sean cadenas?

Estoy trabajando en una sección de código PHP para un proyecto que compara una fecha en el formato AAAA-MM-DD con la fecha actual para ver si es menor que la fecha actual. En diferentes puntos del código se usaron dos métodos diferentes para hacer esta comparación. El primero usadoget_timestamp() en las fechas y corrió la comparación de las marcas de tiempo. En otro lugar, simplemente comparó la cadena de la fecha con la salida dedate("Y-m-d"). Mi expectativa era que la comparación de dos cadenas de fecha no proporcionaría una respuesta correcta. Sin embargo, cuando configuré varios casos de prueba obtuve la salida esperada. Revisé dos partes del manual de PHP para comprender mejor y todavía estoy confundido en cuanto a por qué la comparación funciona sin conversión a una marca de tiempo.

losoperadores de comparación La sección del manual de PHP indica que las cadenas se están convirtiendo en números y luego se hace una comparación numérica o que hace algo que se llama una comparación léxica. No pude encontrar nada más en las comparaciones léxicas, pero cuando leí sobreconversión de cadenas a números y probé los ejemplos utilizando cadenas de fecha. Obtengo la misma salida numérica para cada cadena de fecha que intento.

¿Puede alguien ayudarme a entender por qué funciona una comparación mayor o menor que dos cadenas de fecha (o al menos parece estar funcionando)? ¿Qué me estoy perdiendo?

Como seguimiento, si realmente funciona, asumo que es una mejor práctica convertir la fecha en una marca de tiempo y hacer la comparación en función de la marca de tiempo. ¿Cuál es la mejor función a usar para convertir una fecha en una marca de tiempo?get_timestamp() ostrtotime()?

Código de muestra de menos que / más que la comparación de dos cadenas YYYY-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

Código de muestra que prueba el valor numérico de una cadena YYYY-MM-DD convertida

$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

Respuestas a la pregunta(2)

Su respuesta a la pregunta