将实际日期与其他日期进行比较

时间:2018-10-03 07:44:49

标签: php date datetime

我有这个

$fecha_actual = strtotime('now');
$fechaactual = date("d/m/Y",$fecha_actual); 
$fechatope = $fila1['fechatope'];

if($fechatope < $fechaactual) {
      echo "Fecha Actual: $fechaactual y Fecha Tope: $fechatope ";
}

我获得的结果:

Fecha Actual: 03/10/2018 y Fecha Tope: 03/02/2019

if大于$fechatope时为什么要输入$fechaactual? 我不明白...

7 个答案:

答案 0 :(得分:1)

尝试将它们与

进行比较
strtotime($fechatope) < strtotime($fechaactual)

通过这种方式,它只比较整数,错误几率就较小。

答案 1 :(得分:1)

在PHP中,date函数返回一个字符串。因此,您的变量$fechaactual string

"03/10/2018"

现在我猜你的变量$fechatope string

"03/02/2019"

如果您进行字符串比较,则$fechaactual更大!

这就是为什么如今大多数程序员都不使用特定于国家/地区的日期格式的原因。如果要比较字符串,请使用国际日期格式,ISO 8601,而不是国家/地区的特定格式。 ISO 8601允许对字符串进行排序,因为它是YYYY-MM-DD。日优先或月优先的格式不利于编程。 (咆哮的结尾!:))

或者,您可以比较日期对象本身,也可以将每个日期缩短为一个纪元时间。

日期很难。

答案 2 :(得分:1)

尝试一下

$fecha_actual = strtotime('now');
$fechaactual = date("d/m/Y",$fecha_actual); 
$fechatope = date("d/m/Y",strtotime($fila1['fechatope']));
if($fechatope < $fechaactual) {
  echo "Fecha Actual: $fechaactual y Fecha Tope: $fechatope ";
}

答案 3 :(得分:1)

date() 返回一个字符串。因此,您正在比较一个字符串是否小于另一个字符串(我假设第二个参数的类型,因为我们看不到)。

在PHP中将字符串与 << / strong>和> 进行比较时,有许多特殊规则。它将根据字母顺序比较字符串。如果字符串以数字开头,则该数字将用于比较,依此类推。

无论如何,这很可能不是您的期望。

无论哪种方式,您都可以将两个时间都转换为数字形式的时间戳,并且可以像在代码中进行比较。或者,您可以将字符串变成 DateTime 对象,然后使用 DateTime::diff 函数或 << / strong>,< strong >> == 比较日期。

答案 4 :(得分:1)

假设您有一个字符串03/02/2019,并且要将其与当前时间进行比较:

$fechaactual = new DateTime();                                   // current date and time
$fechatope = DateTime::createFromFormat("m/d/Y|", "03/02/2019"); // 2019-03-02 00:00:00

var_dump($fechaactual < $fechatope);  // true
var_dump($fechaactual == $fechatope); // false (warning: dont use ===)
var_dump($fechaactual > $fechatope);  // false

这个解决方案看起来比其他解决方案复杂得多,但用途最广泛。只要您知道所涉及的日期格式,就不会有任何歧义。

答案 5 :(得分:0)

这是因为在给定的示例中,相比之下,Fecha Tope比Fecha Actual小。

为什么?

因为您的日期格式。想象一下PHP代码计算出一个日期是否大于另一个日期。通过像整数一样进行计算来实现。

所以让我们将日期转换为整数:

Fecha Actual = 03102018 
Fecha Tope = 03022019

现在,因为您的日期格式设置为日,月,年-年份之间的差异并不重要,因为这将是我们整数值中的最小单位。而一天的差异会导致最大的单位变化。

如果重新组织代码,并且从现在开始使用“ Y-m-d”,则在比较日期时将避免此问题。

答案 6 :(得分:0)

由于 date()返回一个字符串,因此您必须对其进行格式化。您还需要遵守时间的编程标准,即Y-m-d,而不是您所在国家/地区的标准。

假设您要从数据库中获取另一个日期(与之比较的日期),则还必须使用 strtotime()函数将该字符串格式化为时间格式。

示例:

$dateExample=date('d/m/Y'); // your date() string

$format = "d/m/Y"; // current string format to change.
$timedate = DateTime::createFromFormat($format, $dateExample); //creates the format and changes the string to a dateTime object.
$dateExample = $timedate->format('Y-m-d'); //perform the format, changing the standard to Y-m-d format.

$anotherDateFromDataBase = $row['dateColumn']; //date variable fetched from the database
$anotherDateFromDataBase = strtotime($anotherDateFromDataBase); //converts the string to time

您现在可以比较两个日期。

if($anotherDateFromDataBase < $dateExample) {
    //do something
}