2

DateTime 对象在我使用时输出 01、02、03 等

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

获取天数

然后我比较 $num 值,如果它是每月的第一天,如下所示:

if ($num == 1)

但 $num 值是 '01'。

现在php按预期进行比较

var_dump($num == 1)

返回

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

intval($num)

这样,如果它是 01,它将显示 '1'

4

2 回答 2

0

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

如果你有==一个比较运算符并且两个值不是来自相同的数据类型,PHP 会尝试匹配它们。

因此,在您的情况下($num == 1),您正在将字符串与文字整数进行比较,

因此 PHP 正在尝试将 Sting 转换为整数(仅用于比较)。
最后,您已经在比较两个整数。当比较运算符is

时不会发生类型转换,因为这涉及比较类型和值。因此,与 类似的比较总是会返回 false。===!==

$num = '1';$num === 1

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

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

来自 PHP 手册:

字符串转换为数字

在数字上下文中评估字符串时,结果值和类型确定如下。

如果字符串包含任何字符“.”、“e”或“E”,则该字符串将被评估为浮点数。否则,它将被评估为整数。

该值由字符串的初始部分给出。如果字符串以有效的数字数据开头,这将是使用的值。否则,该值将为 0(零)。有效的数字数据是一个可选的符号,后跟一个或多个数字(可选地包含一个小数点),后跟一个可选的指数。指数是“e”或“E”后跟一位或多位数字。

于 2015-10-26T17:43:31.893 回答
0

Webdesigner 编写的所有内容都是正确的,但您可以简单地获取天数,而无需通过 'j' 参数前导零:

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

因此,您可以将其与没有任何显式类型转换的普通数字进行比较。

于 2015-10-26T18:08:24.630 回答