【问题标题】:Comparing time in PHP比较PHP中的时间
【发布时间】:2014-09-05 05:50:40
【问题描述】:

我正在将我的数据库中的截止时间(采用 24 小时格式(例如 3:00 = 15:00))与现在的时间进行比较。

例如,如果学生未能按时提交,则上传链接将显示为灰色。

日期比较没问题,我的问题是时间。

这是我当前的代码:

$date = date("Y-m-d");
$time = strtotime(date('G:i:s'));
$deadtime = strtotime($r['upload_deadtime']);

/*------$deadtime = 15:00:00 ---------*/

if(date($r['upload_deadline']) >= $date && $deadtime > $time){

echo '<td><a href="stud_prep.php">upload</a></td>';                 
}
else{
echo '<td><a title="your too late! haha!" style="color:grey">upload</a></td>';  
}

更新:让我们忘记日期比较吧,我想说的是如何比较我的截止时间(采用 24 小时格式(如 3:00:00 = 15:00:00 )) 到现在。

这是我当前的代码:

$time = strtotime(date('G:i:s')); /*which returns 23:15:42 instead of 14:15:42 */
$deadtime = strtotime('15:00:00');


if($deadtime > $time){

echo '<td><a href="stud_prep.php">upload</a></td>';                 
}
else{
echo '<td><a title="your too late! haha!" style="color:grey">upload</a></td>';  
}

【问题讨论】:

  • 您能打印出您首先比较的日期并验证您得到了您想要的吗?如果您只需要验证发布时间小于当前时间,不知道为什么必须满足两个比较。
  • $r['upload_deadline']的值是多少?
  • 不管它持有什么价值,这种比较都是不对的date($r['upload_deadline']) &gt;= $date
  • 我明白你的意思,你只需要比较时间而不是日期,strtotime 会将其转换为从 1970 年 1 月 1 日开始考虑的 unix 时间戳!所以你只需要没有日期的时间!!请在SO 上试试这个答案
  • /*which returns 23:15:42 instead of 14:16:42 */你设置时区了吗?

标签: php time


【解决方案1】:
date_default_timezone_set('Asia/Manila');

$deadtime = strtotime("15:00:00");

if ($deadtime - time() > 0){
  echo '<td><a href="stud_prep.php">upload</a></td>';                 
}else{
  echo '<td><a title="your too late! haha!" style="color:grey">upload</a></td>';  
}

这可能会解决您的时间比较问题!

strtotime("15:00:00") 将时间转换为今天 15:00:00 的 unix 时间戳,time() 具有当前的 unix 时间戳。

【讨论】:

  • 兄弟,我们的时间增加了 3 个小时。我想我会爆炸然后负3然后内爆。你怎么看?
  • 增加了 3 小时?你想爆炸和内爆什么?你的时区是什么时候?我认为这是时区问题!
  • 它的亚洲/马尼拉。我已经粘贴了 date_default_timezone_set('Asia/Manila');在我的代码中。但它在我们的时间里增加了 3 个小时。
  • 这就是我在说什么$time = date('G:i:s'); list($hours,$mins,$secs) = explode(":",$time); $hours = date("G") - 3; $time_array = array($hours,$mins,$secs); $new_time =implode(":",$time_array); echo "&lt;br /&gt;".$new_time;
  • 不,我需要整个时间设置。但我现在明白了
【解决方案2】:

您只需在时间检查中进行比较。

您正在检查截止日期是否在未来(假设脚本始终在当前运行),然后您正在检查截止时间是否小于当前时间(IE 之前),在日期时间纪元值上.

通过您在 strtotime 上进行的检查,您不需要检查日期,因为它们已经通过 epoch 包含在日期和时间中。

简单地做:

if($deadtime > $time){
echo '<td><a href="stud_prep.php">upload</a></td>';                 
} else {
echo '<td><a title="your too late! haha!" style="color:grey">upload</a></td>';  
}

如果截止时间在未来,这只会在表格中显示上传链接。

编辑:

对于您的新代码,您只需将死时间设置为 dBase 中截止日期和时间戳的 strtotime。然后代码将起作用。 你还是在比较错误的方式!

例子:

/* deadtime = strtotime of datetimestamp in format yyyy-mm-dd G:i:s */
/* $time = strtotime of now. */
if($deadtime > $time){
echo '<td><a href="stud_prep.php">upload</a></td>';                 
} else {
echo '<td><a title="your too late! haha!" style="color:grey">upload</a></td>';  
}

【讨论】:

  • 哈哈哦我忘了。但我用“
  • 那是因为你的死时间需要是一个日期时间戳值,它已经运行了 strtotime()。
【解决方案3】:

使用时间PHP's DateTime::Diff

// Current Date and Time
$date_time_now = new DateTime();

// Date Time values from DB (Assuming it's coming from database)
$date_time_deadline = new DateTime('2014-09-08 15:00:00');


// Calculate difference
$difference = $date_time_now->diff($date_time_deadline);

// Output difference in human-readable format
echo "Difference: " . $difference->format('%d days, %h hours, %i minutes, %s seconds');

http://php.net/manual/en/datetime.diff.php

【讨论】:

    【解决方案4】:

    这是我的工作代码。我想你会知道我的意思是。

    date_default_timezone_set('Asia/Manila');
    $time = date('H:i:s');
    $deadline_time = date("h:i a",strtotime($r['upload_deadtime']));
    
    list($hours,$mins,$secs) = explode(":",$time);
    $hours  = date("H") + 9;/*-gives me wrong hours so i got to modify it-*/
    
    $time_array = array($hours,$mins,$secs);
    $new_time =implode(":",$time_array);
    
    $deadtime = strtotime($deadline_time);
    $time_now = strtotime($new_time);
    
    if($r['upload_deadline'] < $date && $deadtime < $time_now){/*-compares the date and time-*/
    
    echo '<td><a  href="stud_prep.php">upload</a></td>';
    
    }
    else{
    echo '<td><a title="your too late! haha!" style="color:grey">upload</a></td>';  
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-13
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 2013-03-13
      • 1970-01-01
      相关资源
      最近更新 更多