php сравнивает 01 к 1 от объекта datetime

DateTime объект выводит 01, 02, 03 и т. Д., Когда я
использование

$num = $dt->format('d');

чтобы получить номер дня

Затем я сравниваю значение $ num, если оно
первый день месяца так:

if ($num == 1)

но значение $ num равно ’01’.

Теперь PHP сравнивает его, как и ожидалось

var_dump($num == 1)

возвращается правда

Я думал, должно ли это быть достаточно для меня
или я должен заключить переменную $ num в intval
вот так:

intval($num)

таким образом, если это 01, он будет отображать «1»

1

Решение

В принципе $num = $dt->format('d') возвращает строку

Если у вас есть == как Операторы сравнения и эти два значения не относятся к одному и тому же типу данных, PHP пытается сопоставить их.

Так в твоем случае ($num == 1) вы сравниваете строку с литералом Integer

Поэтому PHP пытается преобразовать Стинг в целое число (только для сравнения).
В конце вы уже сравниваете два целых числа.

Преобразование типов не происходит, когда Оператор сравнения является === или же !== поскольку это включает в себя сравнение типа, а также значения.

Так с $num = '1';сравнение как $num === 1 всегда возвращал бы ложь

Если вы хотите удалить начальные нули, но не конвертируете тип данных, я бы использовал:
$num_as_str = ltrim($num,'0');

Если вы хотите преобразовать переменную в целое число, используйте это:
$num_as_int = intval($num);

Из руководства по PHP:

Преобразование строки в числа

Когда строка оценивается в числовом контексте, результирующее значение и тип определяются следующим образом.

Строка будет оценена как число с плавающей точкой, если она содержит какой-либо из символов ‘.’, ‘E’ или ‘E’. В противном случае оно будет оцениваться как целое число.

Значение задается начальной частью строки. Если строка начинается с допустимых числовых данных, это будет используемое значение. В противном случае значение будет 0 (ноль). Допустимые числовые данные — это необязательный знак, за которым следуют одна или несколько цифр (необязательно содержащих десятичную точку), за которыми следует необязательный показатель степени. Экспонента представляет собой «е» или «Е», за которыми следуют одна или несколько цифр.

0

Другие решения

Все, что написано Webdesigner, правильно, но вы можете просто получить номер дня без нуля в начале с помощью параметра j:

$num = $dt->format('j');

Таким образом, вы можете сравнить его с обычными числами без явного приведения типов.

0

По вопросам рекламы [email protected]