【问题标题】:Integer that counts up and is divided by 60向上计数并除以 60 的整数
【发布时间】:2013-06-28 20:47:04
【问题描述】:

我正在尝试创建一个以前的时间,例如,当用户点击提交按钮时它开始计数,现在我的表中有一个时间戳字段,但我该如何做到这一点。好吧,这就是我的想法。当用户按下提交时,它会生成一个从 0 开始的整数,并且每秒计数一次,然后除以 60,所以当他们说该整数的 120 时,它已经被除以 60 并显示为 2,或者,2 分钟前,现在,我不知道该怎么做,因为我仍然是一个巨大的 mysql/php 菜鸟,所以如果有人能像我 5 岁那样解释,那就太棒了,谢谢大家

JavaScript 解决方案也不错。

这是我的代码:

while ($row=mysql_fetch_array($result)) {


echo "<tr><td>";
echo $row['cname'];
echo "</td><td>";
echo $row['level'];
echo "</td><td>";
echo $row['region'];
echo "</td><td>";
echo $row['time'];
echo "</td><td>";
echo $row['comment'];
echo "</td></tr>";

}

这是表格的主显示页面。

这是添加到表格页面:

 include('config.php');
$con = mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_NAME);

mysql_query("INSERT INTO cw_LFG(cname, level, region, time, comment) VALUES ('".$_POST['cname'] ."','".$_POST['level'] ."','".$_POST['region'] ."','".$_POST['time'] ."','".$_POST ['comment']."')");



header ("Location: lfg.php");
mysql_close($con);

【问题讨论】:

  • 您是否想让它实时显示时间增量?或者您只是想计算人们刷新网络浏览器的时间? (假设你正在做一个网络应用程序!)
  • 恕我直言,您需要重写您的问题并阐明您实际想要实现的目标。也许是我,但现在似乎完全无法理解。
  • 要在它上升时计算它,您需要一个运行时间很长的 php 脚本,或者每秒刷新一次页面。除非有特定原因这样做,否则只存储原始时间戳然后将其与任何页面刷新时的时间戳进行比较会更容易。从比较中计算出你需要的值
  • 我希望将增量作为 的一部分隐藏,但如果有意义的话,我希望另一个 将其作为时间指南来引用。因此,当整数计数达到 120 时,它将除以 60,另一个 将使用它得到的并将“分钟前”附加到它
  • @Kickstart 我对如何执行此操作感到非常困惑,就像我当前的时间戳字段一样,由于某些奇怪的原因,它显示 00:00:00 作为时间而不是实际提交时间.我想我在用户点击提交时实际上无法显示它。但我试图实现的主要目标是“几分钟前”类型的交易,但我不知道如何做到这一点:c

标签: php javascript sql timestamp


【解决方案1】:

这是一个可用于创建经过时间字符串的函数:

function timeElapsed($time) {
    $elapsedTime = time() - $time;

    if ($elapsedTime < 1) {
        return 'Right now';
    }

    // Length of time units
    $units = array( 
        12 * 30 * 24 * 60 * 60  => 'year',
        30 * 24 * 60 * 60       => 'month',
        24 * 60 * 60            => 'day',
        60 * 60                 => 'hour',
        60                      => 'minute',
        1                       => 'second'
    );

    $string = '';

    foreach ($units as $secs => $unit) {
        $amount = floor($elapsedTime / $secs);

        if ($amount >= 1) {
            $elapsedTime -= $amount * $secs;
            $string .= "$amount $unit" . ($amount > 1 ? 's' : '') . ' ';
        }
    }

    return $string . 'ago';
}

当您创建记录时,您会保存当前时间(这里我使用的是 UNIX 时间戳)。当您想向用户显示它时,您只需将时间戳传递给函数,它将返回一个字符串,如“5 天 2 分钟 30 秒前”

使用示例

echo timeElapsed(1345678910);

【讨论】:

  • 谢谢,我现在遇到的问题实际上是在用户按下提交时保存当前时间,因为它只是将 0000-00-00 00:00:00 显示为当前时间
  • 而不是做 $_POST['time'] 做 date('Y-m-d H:i:s') 将它设置在当前时间
  • 你为什么不将你的表时间字段设置为默认的时间戳......然后你可以在你的过程完成后更新它?上面的这个函数将作为“读取函数”为您服务,仅显示您的时间戳与当前时间+“前”之间的差异
  • 好吧,这似乎解决了 0000 问题,它现在显示日期,当你说将时间戳传递给函数时,我将如何去做:p 对不起我所有的菜鸟问题跨度>
  • 是的,我将类型设置为时间戳,默认设置为 CURRENT_TIMESTAMP,但它看起来像我所做的 Date 事情,现在我必须弄清楚如何让它与函数 @ 一起工作chrislondon 提供,也许我只是愚蠢:/
【解决方案2】:

首先,如果你 5 岁,你不应该玩 JavaScript。除了笑话,您需要的是当用户点击提交时,您将时间戳存储在服务器端,因为您可能在 SQL 表中提到过,并且在页面加载时您将这些值传递给您的页面(您可以将其发送为PHP 生成的 HTML 中的 javascript 数组,但我宁愿在页面加载后立即使用 AJAX 分别询问来自服务器的所有数据以避免模糊代码),然后只计算这些时间戳与当前时间之间的差异并刷新使用setInterval() 每秒(或每分钟)具有这些值的单元格。

var exampleArray = [
  ['user1', timestamp],
  ['user1', timestamp]
];
function count(){
  var currentTime = new Date().getTime();

  for(var i in exampleArray){   
      DOM.tableToAppendTo.rowToAppendTo.innerHTML += 
    '<td>' + exampleArray[i][0] + '</td>' + 
    '<td>' + calculateTime(exampleArray[i][1] - currentTime) + '</td>'
  }
}
function calculateTime(difference){
  if(difference < 59000){
    return (difference / 60000) + ' minutes ago';
  }else{
    return (difference / 1000) + ' seconds ago';
  }
}
setInterval(count,1000);

【讨论】:

  • 用我的代码编辑了我的问题,因为我不知道在哪里添加这些东西
  • 请同时发布围绕行的表格的 HTML
猜你喜欢
相关资源
最近更新 更多
热门标签