如果日期是在今天或之前,我该怎么办?

时间:2010-04-06 15:13:50

标签: php date

我的网络应用程序包含图书馆类型系统,其中图书有截止日期。

我的页面上显示当前日期,只需使用以下内容:

date_default_timezone_set('Europe/London');

$date = date;
print $date("d/m/Y");

我已将'date'设置为变量,因为我不确定当我在我的图书馆图书页面上看到的IF语句中使用它时是否会有所不同。

在这个页面上,我只是输出书籍的截止日期,许多人的日期尚未达到今天的日期,而其他日期的日期大于今天的日期。 基本上,如果它已经过了今天的日期(系统显示日期),我想要的是显示为粗体(或强)的截止日期。这就是我所拥有的并且认为可行的方法:

<?
if ($duedate < $date) {
  echo '<td><strong>';
} else {
  echo '<td>';
} ?>

<?php echo $date('d/m/Y', $timestamp);?></strong></td>

我已将$ timestamp声明为var,它将默认MySQL格式的日期转换为英国版本。谁能帮我吗?我以为这会非常直接!

2 个答案:

答案 0 :(得分:12)

尝试:

if (strtotime($duedate) < time()) {
    // oooh, your book is late!
}

答案 1 :(得分:0)

不使用格式化日期,而是使用其时间戳。要么使用strtotime()将其转换回来,要么使用time()而不是日期。时间戳可以像普通数字一样进行比较,因为这就是它们的正确性。


好的:)让我们从这里开始:

$date = date; // Wrong!
print $date("d/m/Y");

以上仅适用,因为PHP认为date是常量。但是因为你没有设置这个常量PHP会将它转换为字符串'date'。因此$date包含'date'。然后,当调用$date()作为函数时,PHP会评估$date的内容,即'date',并将其用作函数名称,例如date()。你真正想做的只是$date = date('d/m/y')

以下是日期的工作原理:

string date  (  string $format  [,  int $timestamp  ] )

第一个参数是所需的输出格式,第二个参数是可为其生成输出的可选时间戳。如果省略,现在就是。该函数将输出作为字符串返回。

我认为您的$ duedates已经是格式化字符串,例如2010-04-06。所以当你执行$duedate < $date时,你实际上是在进行字符串比较,因为两个变量都保存了格式化的字符串,但没有时间戳。

另一方面,时间戳只是数字。时间戳是以Unix纪元(1970年1月1日00:00:00 GMT)以来的秒数测量的当前时间。您可以使用函数time()获取当前日期和时间的时间戳,并且可以使用strtotime()转换表示日期的字符串。因此,当您想比较日期时,请

if ( strtotime($duedate) < time() ) { // ... do something

这就是它的全部内容。