PHP倒数计时

PHP倒数计时,php,Php,如何在PHP中设置日期和倒计时?例如,如果我将日期设置为12月3日下午2点,它会告诉我还有多少天和小时 不需要用户输入日期,因为它将被硬编码 谢谢。您可以使用strotime函数获取指定日期的时间,然后使用time获取差值 $date = strtotime("December 3, 2009 2:00 PM"); $remaining = $date - time(); $remaining将是剩余的秒数。然后你可以除以这个数字得到天数、小时数、分钟数等等 $days_remaining =

如何在PHP中设置日期和倒计时?例如,如果我将日期设置为12月3日下午2点,它会告诉我还有多少天和小时

不需要用户输入日期,因为它将被硬编码


谢谢。

您可以使用strotime函数获取指定日期的时间,然后使用time获取差值

$date = strtotime("December 3, 2009 2:00 PM");
$remaining = $date - time();
$remaining将是剩余的秒数。然后你可以除以这个数字得到天数、小时数、分钟数等等

$days_remaining = floor($remaining / 86400);
$hours_remaining = floor(($remaining % 86400) / 3600);
echo "There are $days_remaining days and $hours_remaining hours left";

它不像减去strotime()结果那么简单,因为有夏令时,时间在数学上是正确的,但在物理上是不正确的。无论如何,出于这些目的,您应该使用gmdate()函数,它没有夏令时:

$date = gmdate('U', strtotime('2009-12-03 14:00'));

// Get difference between both dates without DST
$diff = $date - gmdate('U');
// Days (in last day it will be zero)
$diff_days = floor($remaining / (24 * 60 * 60));
// Hours (in the last hour will be zero)
$diff_hours = floor($remaining % (24 * 60 * 60) / 3600);
PHP 5.3允许这样做:

$dt_end = new DateTime('December 3, 2009 2:00 PM');
$remain = $dt_end->diff(new DateTime());
echo $remain->d . ' days and ' . $remain->h . ' hours';

让我这样玩玩:

$rem = strtotime('2012-08-01 14:00:00') - time();
$day = floor($rem / 86400);
$hr  = floor(($rem % 86400) / 3600);
$min = floor(($rem % 3600) / 60);
$sec = ($rem % 60);
if($day) echo "$day Days ";
if($hr) echo "$hr Hours ";
if($min) echo "$min Minutes ";
if($sec) echo "$sec Seconds ";
echo "Remaining...";
有空时试试这个…:-)


注意:没有
if()
测试
echo“剩余…”
,只是因为如果
$rem在学期末进行倒计时,您不会处理此问题:

    $endOfSemester = mktime(15,30,0,5,21,2015);
    $now = time();
    $secondsRemaining = $endOfSemester - $now;

    define('SECONDS_PER_MINUTE', 60);
    define('SECONDS_PER_HOUR', 3600);
    define('SECONDS_PER_DAY', 86400);

    $daysRemaining = floor($secondsRemaining / SECONDS_PER_DAY); //days until end
    $secondsRemaining -= ($daysRemaining * SECONDS_PER_DAY); //update variable

    $hoursRemaining = floor($secondsRemaining / SECONDS_PER_HOUR); //hours until end
    $secondsRemaining -= ($hoursRemaining * SECONDS_PER_HOUR); //update variable

    $minutesRemaining = floor($secondsRemaining / SECONDS_PER_MINUTE); //minutes until end
    $secondsRemaining -= ($minutesRemaining * SECONDS_PER_MINUTE); //update variable

    echo("<h3>There are $daysRemaining days, $hoursRemaining hours, $minutesRemaining minutes, $secondsRemaining seconds until the end of the semester</h3>"); //print message
$endOfSemester=mktime(15,30,0,5,212015);
$now=时间();
$secondsRemaining=$endOfSemester-$now;
定义(“每分钟秒数”,60);
定义(“每小时秒数”,3600);
定义(“每天秒数”,86400);
$daysRemaining=地板($secondsRemaining/秒/天)//截止日期
$secondsRemaining-=($daysresemaining*每天秒数)//更新变量
$hoursRemaining=楼层($secondsRemaining/SECONDS\u/h)//离结束还有几个小时
$secondsRemaining-=(剩余$hours*SECONDS\u/u小时)//更新变量
$minutesRemaining=楼层($secondsRemaining/秒/分钟)//离结束还有几分钟
$secondsRemaining-=(剩余$minutesRemaining*每分钟秒数)//更新变量
echo(“学期结束前有$days剩余天数、$hours剩余小时、$minutes剩余分钟、$seconds剩余秒”)//打印消息

使用@Izhar Aazmi解决方案,您可以很好地将其设置为显示,如下所示:

    public function countdown($time, $h = true, $m = true, $s = true) {
        $rem = $time - time();
        $day = floor($rem / 86400);
        $hr = floor(($rem % 86400) / 3600);
        $min = floor(($rem % 3600) / 60);
        $sec = ($rem % 60);

        if ( $day && !$h ) {
            if ( $hr > 12 ) $day++; // round up if not displaying hours
        }

        $ret = Array();
        if ( $day && $h ) $ret[] = ($day ? $day ." day".($day==1?"":"s") : "");
        if ( $day && !$h ) $ret[] = ($day ? $day . " day" . ($day == 1 ? "" : "s") : "");
        if ( $hr && $h ) $ret[] = ($hr ? $hr ." hour" . ($hr==1?"":"s") : "");
        if ( $min && $m && $h ) $ret[] = ($min ? $min ." minute". ($min==1?"":"s") : "");
        if ( $sec && $s && $m && $h ) $ret[] = ($sec ? $sec ." second".($sec==1?"":"s") : "");

        $last = end($ret);
        array_pop($ret);
        $string = join(", ", $ret)." and {$last}";

        return $string;
    }

我希望这有帮助!这是一种很好的显示倒计时的方式。

对于那些寻找能够处理越来越大和越来越小的时间跨度(php>5.3)的函数的人来说:


在事件发生的前一天,当我希望倒计时读数为1时,倒计时读数为0。。。我在哪里添加+1?小心,1天=86400秒并不总是正确的
/**
 * Return a textual representation of the time left until specified date
 */
function timeleft(DateTime $date){
  $now = new DateTime();

  if($now > $date){
    return '0 second';
  }

  $interval = $date->diff($now);

  if($interval->y){
    return $interval->format("%y year").($interval->y > 1 ? 's':'');
  } else if($interval->m){
    return $interval->format("%m month").($interval->m > 1 ? 's':'');
  } else if($interval->d){
    return $interval->format("%d day").($interval->d > 1 ? 's':'');
  } else if($interval->h){
    return $interval->format("%h hour").($interval->h > 1 ? 's':'');
  } else if($interval->i){
    return $interval->format("%i minute").($interval->i > 1 ? 's':'');
  } else if($interval->s) {
    return $interval->format("%s second").($interval->s > 1 ? 's':'');
  } else {
    return 'milliseconds';
  }
}