【问题标题】:How to get seconds elapsed since midnight如何获取自午夜以来经过的秒数
【发布时间】:2012-07-13 01:20:42
【问题描述】:

使用 PHP 如何获取从当天午夜开始经过的秒数?

我现在尝试的只是:

$hour=substr(date("h:i:s"),0,2);
$minute=substr(date("h:i:s"),3,2);
echo $hour."\r\n";
echo $minute."\r\n";

...但它没有返回响应的正确服务器时间,我不知道该怎么做。

【问题讨论】:

  • 你在哪里被卡住了?你试过什么?
  • 我现在尝试的只是 $hour=substr(date("h:i:s"),0,2); $minute=substr(date("h:i:s"),3,2);回声$小时。"\r\n";回声$分钟。"\r\n";但它没有返回响应的正确服务器时间,我不知道该怎么做。我在其他地方使用 GET 请求,我试图让我的 php 脚本返回自当天午夜以来经过的秒数
  • 请让这是关于这个主题的最后一个问题。这个问题和大多数类似的问题都可以通过查看手册来回答。有关相关格式,请参阅手册:php.net/manual/en/datetime.formats.relative.php 有关可接受的日期格式的更多详细信息,请参阅此处的手册:php.net/manual/en/datetime.formats.php
  • @Nubcake:我对我上次的评论/回答的粗鲁表示歉意。但我会要求您下次首次使用本网站上的搜索功能查找与您的问题相似或完全匹配的任何帖子。

标签: php


【解决方案1】:

我认为最简单的方法是将当前时间(以秒为单位)除以一天中的秒数(60*60*24),然后取余数:

(time() % 86400)

【讨论】:

  • 不错,但它计算自午夜 UTC 以来的秒数,而不是本地时间
  • 确实,它在 GMT/UTC 中使用 Linux 纪元——我猜这对我来说从来都不是问题,因为无论如何我都使用 UTC。
  • “我会在午夜左右回家,亲爱的”电话那头大声交谈,“不,亲爱的,我呃,我指的是午夜 UTC! " ;)
  • 好的,.. 一切都是 PHP 明智的 :)
  • 当前时间不是从午夜算起的秒数吗?
【解决方案2】:

这应该可行。

echo time() - strtotime("today");

不过,这只会显示您的服务器时区。

【讨论】:

    【解决方案3】:

    如果您使用的是日期时间:

     $timeDiff = $time->diff(new \DateTime("today")); 
     $timeDiffSec = $timeDiff->h* 3600 + $timeDiff->i*60 + $timeDiff->s;
    

    【讨论】:

      【解决方案4】:

      最短的解决方案可能是这样的:

      $time = "12:34:56";
      echo strtotime("{$time}UTC", 0);
      

      这样做的原因是strtotime 使用第二个参数来确定时间字符串的日期 部分。在这种情况下,我使用0,这意味着完整的字符串结果为1970-01-01 12:34:56 UTCstrtotime 然后返回 UNIX 时间戳(自 1970-01-01 00:00:00 UTC 以来经过的秒数)。注意:第一个参数附加了UTC,以防止时间被解释为本地时间。

      日期时间(以微秒计)

      比已经提到的DateTime::diff 解决方案更快(3 倍)和更精确的替代方案:

      $date = new DateTime;
      [$h, $m, $s] = explode(':', $date->format('H:i:s.u'));
      echo $h * 3600 + $m * 60 + $s;
      

      【讨论】:

        【解决方案5】:

        我认为您想获取从一天开始到当前小时数和秒数的时间,可以这样做,您仍然需要设置您的时区时间来代替“亚洲/卡拉奇”。这会在用户的时区而不是服务器的时区时间中获得自午夜以来的正确时间。

        这是工作链接: http://codepad.viper-7.com/ykJC2R

        //Get current time timestamp
        $time_now = time();
        
        //Create DateTime class object
        $date = new DateTime(); 
        
        //Set timestamp to DateTime object
        $date->setTimestamp( $time_now );
        
        //Set timezone so that code don't get server's timezone midnight time
        $date->setTimezone(new DateTimeZone('Asia/Karachi'));
        
        //Print current time in user's timezone
        echo $date->format('Y-m-d H:i') . "<br />";
        
        //Get time stamp for midnight tonight
        $date->modify('today midnight');
        $midnight_time = $date->getTimestamp();
        
        //Print midnight time in user's timezone
        echo $date->format('Y-m-d H:i') . "<br />"; 
        
            //Now you will need to subtract midnight time from current time in user's timezone
        $seconds_since_midnight = $time_now - $midnight_time;
        
        //Print seconds since midnight in your timezone
        echo $seconds_since_midnight;
        

        【讨论】:

          【解决方案6】:

          我坚持对数字的操作总是比对字符串的操作快的规则。当数字是整数时,操作会更快(因为 CPU 寄存器总是“整数宽”,意味着有 32 位或 64 位,所有其他非浮点类型在执行任何操作之前都转换为整数)。

          无论如何,我找到了这样的解决方案,用时区计算到午夜的秒数包括:

          $tillmidnight = 86400 - (time() - mktime(0, 0, 0));

          你想得到自午夜以来经过的秒数:

          $sincemidnight = time() - mktime(0, 0, 0);

          最好也检查一下您的 php.ini 并在那里设置您的时区([Date] 部分下的 date.timezone)。如果您无权访问 php.ini,您可以使用 date_default_timezone_set() 在 PHP 代码中设置您的时区;功能。

          【讨论】:

          • 我看不出这是如何工作的。它不考虑时区。
          • @BerenddeBoer 它需要您自己配置的时区。这就是为什么我喜欢这个解决方案,这里没有人决定。运行时的时区由 date_default_timezone_set() 设置;单个 PHP 环境的时区(注意,您的服务器上可能有多个,取决于您的需要)在 php.ini 中设置,并从那里获取在此环境下运行的每个代码。
          【解决方案7】:

          在 Carbon 中,从午夜开始经过的秒数可以这样计算:

          $seconds_since_midnight = $dt-&gt;secondsSinceMidnight();

          虽然从午夜开始没有几分钟,但我想你会这样做:

          $minutes_since_midnight = (int) floor($dt-&gt;secondsSinceMidnight()/60);

          【讨论】:

            【解决方案8】:
            echo (date('G') * 3600 + date('i') * 60);
            

            将当前小时乘以每小时的秒数,然后将其与分钟数乘以每分钟的秒数相加。

            【讨论】:

            • 但这会将它向下舍入到最接近的分钟。
            【解决方案9】:

            根据您的评论,如果您以字符串形式接收时间并想要计算从该时间开始的秒数:

            $time = strtotime($_GET['time']); // Do some verification before this step
            $midnight = strtotime("00:00"); // Midnight measured in seconds since Unix Epoch
            $sinceMidnight = $time - $midnight; // Seconds since midnight
            

            给你。读入PHP的time()函数和strtotime()

            【讨论】:

            • 如何处理来自响应的时间,例如 01:28:49 ?我用服务器时间代替 00:00 吗?
            • 没有。 00:00 是午夜,然后减去当前时间以获取自午夜以来的时间(以秒为单位)。这是你的问题吗?
            • 让我试着更简单地解释一下对不起,我正在使用 GET 请求,在来自服务器的响应中,您将获得 Date: 部分,所以如果时间(来自该部分)是01:35:33,你如何计算从午夜开始经过的秒数,我忘了在 OP 中添加。
            • 我根据您所说的进行了一些更改。读入strtotime(),我想这就是你要找的。​​span>
            • 我明天试试这个,已经很晚了,谢谢。
            【解决方案10】:
            echo time() - strtotime('today');
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-09-29
              • 2018-03-11
              • 2010-11-07
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多