【问题标题】:unix timestamp round to midnightUnix时间戳轮到午夜
【发布时间】:2012-01-22 22:16:51
【问题描述】:

如果我有一个随机的 unix 时间戳,我如何将它向下舍入到今天的午夜或用户选择的午夜。这样做的原因是我想在某一天的午夜之后添加小时和分钟。

例如,如果时间戳是1324189035,那么如何删除小时、分钟和秒以将时间戳放在当天的午夜。

【问题讨论】:

    标签: php unix-timestamp


    【解决方案1】:
    echo date('d-m-Y H:i:s', strtotime('today', 1324189035));
    

    【讨论】:

    • 这很漂亮。我曾看到有人跳出框框思考,比如$roundedStamp = $time - ($time % 86400);,它很聪明,但并不完美。它根据情况向上或向下舍入,因此不起作用。这样做:)
    • 这将返回一个日期字符串,您需要添加 strtotime 以获得午夜的时间戳,该时间戳应该包含正在回显的整个代码。
    • @SolomonClosson strtotime('today', 1324189035) 已经在那里并做了这件事,date 只是为了证明它实际上是午夜。
    • awww,明白了,有点混淆了 date 回声。
    • 迫切希望这可能对我的情况有所帮助,稍微调整一下以从 UNIX 纪元获得 number 天(从相同的时间戳以消除舍入错误):round(strtotime('today', time()) / 86400))。我的用例是发现自 Epoch 以来的奇数天以交替使用 cron 程序 round($daysFromUnixEpoch) % 2 === 0
    【解决方案2】:

    由于您使用它的方式,我根本不会计算午夜:简单地将您添加到时间戳的内容转换为 24 小时时间,然后使用 strtotime:

    echo strtotime("0:00",1324189035); // 1324184400
    echo strtotime("17:50",1324189035); // 1324248600
    

    如果您想让它具有人类可读性,请使用datem/d/Y H:i:s

    echo date('m/d/Y H:i:s', strtotime('17:50',1324189035)); // 12/18/2011 17:50:00
    

    【讨论】:

    • 这个解决方案是最优雅和令人愉悦的。需要记住,这都是格林威治标准时间,因此要在任何其他时区获得 17:50,需要在此时间映射之前添加时间偏移,然后再取消(假设您最终要寻找格林威治标准时间/例如,在数据库中搜索数据的 UTC 时间)。
    • 似乎将午夜映射到上一个午夜:echo strtotime("0:00 +0000", 1443441600); prints 1443398400
    【解决方案3】:

    简单使用

    strtotime('today midnight');
    

    【讨论】:

    • 这非常易读,也非常灵活。例如:strtotime('now + 1 year + 1 day midnight')
    • 只想添加 strtotime('today午夜') 和 strtotime('midnight') 都输出相同的时间戳
    【解决方案4】:

    做事

    date('d-m-Y',strtotime('today'));
    

    简单!

    【讨论】:

      【解决方案5】:

      一个简单的解决方案是使用 modulo 表达式从圆形日期时间戳中删除超过的秒数。

      <?php
      
      date_default_timezone_set('UTC');
      
      $timestamp = time();
      
      echo "timestamp : " . $timestamp . PHP_EOL;
      echo "timestamp formatted : " . date('Y-m-d H:i:s', $timestamp) . PHP_EOL;
      
      $diff = $timestamp % (60 * 60 * 24);
      
      echo "diff : " . $diff . PHP_EOL;
      
      $midnight = $timestamp - $diff;
      
      echo "midnight : " . $midnight . PHP_EOL;
      echo "midnight formatted : " . date('Y-m-d H:i:s', $midnight) . PHP_EOL;
      

      这将输出以下结果。

      时间戳:1575451074

      时间戳格式:2019-12-04 09:17:54

      午夜差异:1575417600

      午夜格式化:2019-12-04 00:00:00

      这是一个单行函数,可以从任何时间戳获取您的午夜。

      function getMidnight ($timestamp) { return $timestamp - ($timestamp % 86400); }
      

      http://sandbox.onlinephpfunctions.com/code/1d85c935e71fcf011284ae33658e0c68dd8d8c28

      【讨论】:

        【解决方案6】:

        如何: date -d $(date +%F) +%s

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-30
          • 1970-01-01
          • 1970-01-01
          • 2012-10-19
          • 1970-01-01
          相关资源
          最近更新 更多