【问题标题】:Unix timestamp to seconds, minutes, hoursUnix时间戳到秒,分钟,小时
【发布时间】:2010-07-16 18:42:07
【问题描述】:

我需要以某种方式获取一个 unix 时间戳并将其输出如下

这可以用 MySQL 完成吗?或者php

Mike                             7s ago
Jim                              44s ago
John                             59s ago
Amanda                           1m ago
Ryan                             1m ago
Sarah                            1m ago
Tom                              2m ago
Pamela                           2m ago
Ruben                            3m ago
Pamela                           5h ago

你可以猜到我只想打印分钟,而不是分钟和秒(1m 3s 前)

我应该调查什么?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    是的,它可以做到。 See related post

    $before // this is a UNIX timestamp from some time in the past, maybe loaded from mysql
    $now = time()
    
    $diff = $now - $before;
    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 5.3 和更高版本具有DateTime 对象,您可以使用从数据库返回的数据来构建这些对象。这些DateTime 对象有一个diff 方法来获取两个日期之间的差异作为DateInterval 对象,然后您可以使用format

      编辑:将sub 更正为diff

      编辑 2: 这样做有两个问题:

      1. DateTime 的构造函数似乎没有采用 UNIX 时间戳...除非以 @ 为前缀,例如:$startDate = new DateTime('@' . $timestamp);
      2. 如果不手动检查它们,您将无法知道最大的单位是多少。要获得单个字段,您仍然需要使用格式,但只需一个代码......就像$years = $dateDiff->format('y');

      【讨论】:

      • +1 如果您不熟悉 PHP 日期处理,请从一开始就使用 DateTime。这比时间戳要好得多。
      • 我犯了一个错误,使用 sub 而不是 diff。我现在已经修好了。
      【解决方案3】:
      function sECONDS_TO_DHMS($seconds)
      {
      
          $days = floor($seconds/86400);
          $hrs = floor($seconds / 3600);
          $mins = intval(($seconds / 60) % 60); 
          $sec = intval($seconds % 60);
      
          if($days>0){
              //echo $days;exit;
              $hrs = str_pad($hrs,2,'0',STR_PAD_LEFT);
              $hours = $hrs-($days*24);
              $return_days = $days." Days ";
              $hrs = str_pad($hours,2,'0',STR_PAD_LEFT);
          }else{
              $return_days="";
              $hrs = str_pad($hrs,2,'0',STR_PAD_LEFT);
          }
      
          $mins = str_pad($mins,2,'0',STR_PAD_LEFT);
          $sec = str_pad($sec,2,'0',STR_PAD_LEFT);
      
          return $return_days.$hrs.":".$mins.":".$sec;
      }
      
      echo sECONDS_TO_DHMS(2); // Output 00:00:02
      echo sECONDS_TO_DHMS(96000); // Output 1 Days 02:40:00
      

      【讨论】:

        【解决方案4】:

        PHP 的date() 函数

        以及time() 和这些文档中链接的其他一些人

        这也可以用date and time函数在Mysql中完成

        【讨论】:

          【解决方案5】:

          你可以试试我的Timeago 建议here

          它可以给出这样的输出:

          您打开此页面不到 分钟前。 (这将更新每个 分钟。等等。)

          此页面最后一次修改 11 天 以前

          Ryan 31 年前出生

          【讨论】:

            【解决方案6】:

            我手头没有 mysql 服务器,但是结合使用以下命令应该可以得到你想要的东西。

            DATEDIFF

            DATEFORMAT

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-06-11
              • 2020-11-25
              • 2014-04-30
              • 2018-03-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多