Вопрос простой: Почему? Да, с человеческой точки зрения - всё правильно. Но я ведь сравниваю просто строки, не разбираю эту дату, не привожу в unixtime и не сравниваю это значение. Насколько я знал, при сравнение строк, значения приводятся в тип int, но если явно привести их в тип int, то они будут равны... Как так получается?
FanatPHP, ответ на Ваш вопросительный комментарий такой же очевидный, как и мой вопрос, но меня, после этого Вашего вопросительного ответа, осенило ещё больше, чем после ответов ниже)
Я сегодня, явно, слишком много думал))
насколько я знаю строки сравниваются посимвольно (char коды). и тут чар-код "1" будет меньше чем "2".
до первого вхождения. как только удается определить какая строка меньше - дальше проверка не производится. в вашем случае она останавливается на последнем символе дня.
Насколько я знал, при сравнение строк, значения приводятся в тип int, но если явно привести их в тип int, то они будут равны
Нет, не приводятся. Разве что, до 8 версии, если один из аргументов число или строка содержащее число, то тогда оба аргумента преобразовываются в числа перед сравнением.
Радость моя, сейчас мне кажется, что я это знал раньше. Но, возможно, такой эффект от того, что: либо я быстро впитываю информацию, не успев осознать этого; либо я слишком медленно осознаю то, что узнал.
Vitsliputsli, я доверяю Вам, честно, но не могли бы Вы дать ссылку на документацию, где описано сравнение строки со строкой и где говорится, что строки со строками сравниваются посимвольно.
насколько я знаю строки сравниваются посимвольно (char коды)
Только не посимвольно, а по байтно, хотя практически особой разницы нет. Строка - это массив байт и сравнение проходит также, побайтно бежим по массивам.
rPman, Потому, что сравниваются строки, побайтно. И 'а1' будет меньше, чем 'а2'. Я тогда это знал, но забыл… понимаю, радость моя, может показаться, якобы я отмазываюсь, но в тот день я очень сильно зациклился на одной задаче и мой мозг поплыл. Спасибо за ответ.
UPD. Блин, «радость моя» — это имя юзера, давшего ответ, а не попытка задеть меня :D сорян)
Вопрос не в этом. Вообще, я использую new DateTime('2021-02-21 22:04:47');. Но случайно сравнил обычные строки и был удивлён. Теперь я хочу узнать, почему произошло так, как произошло?!
В случае, если оба операнда являются строками, содержащими числа или один операнд является числом, а другой - строкой, содержащей числа, то сравнение выполняется численно.
Ну если так подумать, то корректные даты этого формата возможно (не говорю, что нужно или что это правильно, просто возможно) сравнивать таким образом. Так?
Можно и нужно.
Учитывая что люди сравнивают даты поразрядно, сначала годы, потом месяцы и так далее, то дата, записанная в том же порядке, будет всегда сравниваться корректно.
Ну ,специально избавляться не надо, у DateTime есть много плюсов. Многие программы сразу при получении даты из БД или из браузера сразу делают объект DateTime и дальше уже с ним работают
но если чисто для сравнения - то да, не нужно
John Didact, если вы серьезно, то не стоит. Да, все будет работать корректно, но с точки зрения универсальности лучше использовать DateTime: более очевидно, что вы работаете с датой; объект предоставляет дополнительный функционал для работы с датой; и дату можно в разных форматах использовать.
Ну значит идиоты дататайм придумали )
Срочно все его сносим ибо бесполезен.
Ведь оно само типа сравнивает корректно )
Я могу ошибаться, но мне кажется лучше даты сравнивать как даты а не как строки, и это более правильно.
Хоть чудес каких нить трудноотлавливаемых не вылезет.
в подавляюще большом количестве случаев, если работаем с локальным временем а не античной историей к примеру или абстрактным будущим жизни звезд, то более чем достаточно, удобно и максимально быстро работать с unix timestamp, уходя в DateTime или иные форматы только по необходимости (которая происходит очень редко), а в 64bit с отрицательными значениями можно и везде (500 миллиард лет в секундах)