【问题标题】:How to display time countdown using PHP and MySQL如何使用 PHP 和 MySQL 显示时间倒计时
【发布时间】:2010-06-24 04:35:44
【问题描述】:

如何使用 PHP 获得时间倒计时?

我想显示类似 3Days 4Hours 的内容。我有一个来自 MySQL 表的日期字段,想用今天的日期计算它。到目前为止,我只有日期而不是存储在数据库中的时间,但最终我会的。所以那个时候,我可能会显示为 3Days 4Hours 10Minutes 43seconds。

这是我尝试过的,但得到了一些错误的答案:

$datetime1 = new DateTime($starton);//$starton - date stored in db
$datetime2 = new DateTime(date());
$interval = $datetime1->diff($datetime2);
echo $interval->format('%d days);

我很困惑这是否基于服务器时间或用户来自的区域。请指导我。当我有时间字段时,我想我可能需要 jQuery 来实时显示秒数和分钟数。

【问题讨论】:

  • 您为$datetime2 拨打date() 是多余且错误的,这可能是问题所在吗?另外,你得到什么样的错误答案?
  • 当你说show the seconds live ...你的意思是你希望它实时更新?
  • 你是对的,这可能是原因。对不起,我也无法得到错误的输出,可能我修改了其他东西。我正在阅读您的其他回复,但您似乎删除了它,有什么原因吗?
  • @russell,我的意思是如果存储的日期和时间是 2010 年 6 月 26 日凌晨 1 点。然后我想将其显示为 2 天 10 分 45 秒。当用户在主页上时,这 45 秒会减少..所以在 45 秒完成后会减少 2 天 9 分钟。
  • 你可以单独使用 javascript 来实现,就像我为 team.cipher-tech.com 做的那样

标签: php javascript jquery mysql date


【解决方案1】:

恕我直言,当您考虑比较时间时,您会自动开始谈论 Unix 时间。本质上,Unix 时间是以秒为单位的计数,总是递增的。当您有 2 个 Unix 时间戳时,您可以使用简单的算术计算差异,然后将差异转换为人类可读的形式。

请注意,Unix 时间戳在几乎所有编程语言中都很常见,因此您可以选择是否在 PHP、MySQL 或 JavaScript 中执行此操作,结果都可能相同。我会告诉你 PHP 版本。

所以你想这样做:

  1. 查找目标事件的 Unix 时间戳
  2. 将其存储在 MySQL 数据库中
  3. 从数据库中检索
  4. 获取当前 Unix 时间戳
  5. 减法获得差异
  6. 乘/除以获得人类可读的格式

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!"
}

【讨论】:

    【解决方案2】:

    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 函数。

    【讨论】:

      【解决方案3】:

      既然你提到了 jQuery,如果你同意的话,可以只用 JavaScript 来做。

      jQuery 倒计时插件和工作示例: http://keith-wood.name/countdown.html

      还可以节省您对数据库的调用。

      【讨论】:

        【解决方案4】:

        不是 100% 回答您的问题,但手动的方法是这样的:

        $start = strtotime($dbTime);
        $now = time();
        $differenceInSeconds = $start - $now;
        

        从那里你只需要格式化它,你就可以找到一个算法in this answer

        【讨论】:

          【解决方案5】:

          好吧,我认为如果您在服务器上调用 date(),您将获得服务器日期和时区。不过,如果您担心的话,您可以使用函数date_default_timezone_set([TIMEZONE]); 强制时区。

          如果我这样做,并且想要逐秒倒计时,我可能会将计算出的间隔传递给 javascript 并让 jQuery 进行格式化,特别是如果你想要一个活动计数器。

          就此而言,您可以将整个事情卸载到 javascript,并将两个日期传递给它,然后使用 date1.getTime() - date2.getTime() 获取以毫秒为单位的时差,然后在 javascript 中自己进行数学计算(这是抄自 @987654321 @)

          如果我在 JS 中更改它,我可能会这样做。

          【讨论】:

            【解决方案6】:

            这是一些框架(如 Ruby on Rails)已经解决的解决方案,PHP 似乎不是其中之一,我认为您正在寻找的是这样的:

            http://www.phpro.org/examples/Convert-Seconds-To-Hours-Minutes-Seconds-Words.html

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-09-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多