如何使用PHP获得倒计时?
我想要显示像3Days 4Hours这样的东西。我有一个来自MySQL表的日期字段,想要用今天的日期来计算它。截至目前,我只有日期,而不是存储在数据库中的时间,但最终我会。所以在那个时候,我可能会将3D时间显示为4小时10分钟43秒。
这是我尝试的但是得到了错误的答案:
$datetime1 = new DateTime($starton);//$starton - date stored in db
$datetime2 = new DateTime(date());
$interval = $datetime1->diff($datetime2);
echo $interval->format('%d days);
如果这基于服务器时间或用户来自的区域,我感到很困惑。请指导我。当我有时间字段时,我想我可能需要jQuery来显示秒数和分钟数。
答案 0 :(得分:3)
请注意,Unix时间戳在几乎所有编程语言中都很常见,因此您可以选择是在PHP,MySQL还是JavaScript中执行此操作,并且它们都可以采用相同的方式。我将向您展示PHP版本。
所以你想这样做:
PHP代码:
//Unix timestamp to Dec. 21, 2012 (midnight)
$unix_time = mktime(0,0,0,12,21,2012);
//Connect to MySQL
//"INSERT INTO table (target_timestamp) VALUES ($unix_time);"
//----- user goes to page -----
//Connect to MySQL
$sql = "SELECT target_timestamp FROM table WHERE foo = bar";
$unix_time = do_query($sql);//do_query not defined, assume it gets the timestamp
$current_time = time();
$diff = $unix_time - $current_time
//$diff should be positive and not 0
if( 1 > $diff ){
exit('Target Event Already Passed (or is passing this very instant)');
} else {
$w = $diff / 86400 / 7;
$d = $diff / 86400 % 7;
$h = $diff / 3600 % 24;
$m = $diff / 60 % 60;
$s = $diff % 60;
return "{$w} weeks, {$d} days, {$h} hours, {$m} minutes and {$s} secs away!"
}
答案 1 :(得分:1)
PHP将使用服务器设置的时区,可以使用date_default_timezone_set()
在脚本中手动设置。您可以通过以下几种方式实现这一目标:
您实际上可以使用MySQL查询为您进行计算。请参阅TimeDiff()
功能:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_timediff。然后,您可以使用TimeFormat()
将其格式化为您想要的格式。
或者你可以通过PHP完成它。你可以转换为unix epoch - >格式化为日期。另一种选择是从你做的两个DateTime对象开始。尝试:
$datetime1 = new DateTime($starton);
$datetime2 = new DateTime();
$interval = $datetime1->diff($datetime2);
echo $interval->format('%d days);
或程序上:
$datetime1 = date_create($starton);
$datetime2 = date();
$interval = date_diff($datetime1,$datetime2);
echo $interval->format('%d days');
另外,如果要将计数器显示为实时更新计数器;你可能不得不稍后将其交给Javascript函数。
答案 2 :(得分:1)
既然你提到了jQuery,那么就可以通过JavaScript来实现它,如果可以的话。
jQuery倒计时插件和工作示例: http://keith-wood.name/countdown.html
还可以节省您对数据库的调用。
答案 3 :(得分:0)
不是100%回答您的问题,但手动方式是:
$start = strtotime($dbTime);
$now = time();
$differenceInSeconds = $start - $now;
从那里你只需要格式化它,你就可以找到算法in this answer。
答案 4 :(得分:0)
好吧,我想如果您在服务器上调用date(),那么您将获得服务器日期和时区。但是,如果这是一个问题,您可以使用函数date_default_timezone_set([TIMEZONE]);
强制使用时区。
如果我这样做,并希望逐秒倒计时,我可能会将计算的间隔传递给javascript并让jQuery进行格式化,特别是如果你想要一个活跃的计数器。
就此而言,您可以将整个内容卸载到javascript,并将其传递给两个日期,并使用date1.getTime() - date2.getTime()
来获取时间差(以毫秒为单位),并在javascript中自行完成数学运算(这是从this answer)
如果我在JS中改变它,那么我可能会这样做。
答案 5 :(得分:0)
这是一个解决方案,一些框架(如Ruby on Rails)已经解决,PHP似乎不是其中之一,我认为你正在寻找的是:
http://www.phpro.org/examples/Convert-Seconds-To-Hours-Minutes-Seconds-Words.html