php 将日期时间对象中的 01 与 1 进行比较

php compare 01 to 1 from datetime object

DateTime 对象输出 01、02、03 等,当我 使用

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

获取天数

然后我比较 $num 值,如果它是 这个月的第一天像这样:

if ($num == 1)

但是 $num 值为'01'。

现在php比较符合预期

var_dump($num == 1)

returns

我在想,这对我来说是否足够 或者我应该用 intval 将 $num 变量括起来 像这样:

intval($num)

这样如果是01就会显示'1'

基本上 $num = $dt->format('d') return 是一个字符串。

如果您将 == 作为 比较运算符 并且这两个值不是来自同一数据类型,则 PHP 尝试匹配它们。

因此,在您的情况下 ($num == 1),您正在将 String 与文字 Integer

进行比较 因此 PHP 试图将 Sting 转换为整数(仅用于比较)。
最后你已经在比较两个整数了。

Comparison Operator===!== 时,不会发生类型转换,因为这涉及比较类型和值。

所以对于 $num = '1';,像 $num === 1 这样的比较总是 return 错误。

如果你想去除前导零但不'转换数据类型,我会用:
$num_as_str = ltrim($num,'0');

如果您想将变量转换为整数,请使用:
$num_as_int = intval($num);

From the PHP manual:

String conversion to numbers

When a string is evaluated in a numeric context, the resulting value and type are determined as follows.

The string will be evaluated as a float if it contains any of the characters '.', 'e', or 'E'. Otherwise it will be evaluated as an integer.

The value is given by the initial portion of the string. If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). Valid numeric data is an optional sign, followed by one or more digits (optionally containing a decimal point), followed by an optional exponent. The exponent is an 'e' or 'E' followed by one or more digits.

Webdesigner 写的一切都是正确的,但是您可以通过 'j' 参数简单地获取不带前导零的天数:

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

因此您可以将它与普通数字进行比较,而无需任何显式类型转换。