【问题标题】:Rounding down UNIX time to lower hour in PHP在 PHP 中将 UNIX 时间四舍五入以减少小时数
【发布时间】:2010-08-16 13:38:16
【问题描述】:

我一直试图在 PHP 中将当前时间四舍五入到较低的小时。

这是我想做的: 1.取当前时间: $time_now = time(); 2.四舍五入到最接近的时间: $time_now = $time_now - ($time_now % 3600); 3.使用日期功能打印: print date('d m Y H:i', $time_test);

但似乎正在发生的是打印时间是我想要的 + 30 分钟。 例如:如果当前时间是 19:03,我会得到 18:30 而不是 19:00 的输出 如果时间是 19:34,我得到的输出是 19:30 而不是 19:00

这快把我逼疯了! X( 这段代码似乎有什么问题?!也许与时区有关?我的系统时间是 GMT +5:30

【问题讨论】:

  • 你回显 $time_test 但之前在代码中是 $time_now?
  • 它的接缝是时区。在我的本地环境(格林威治标准时间 +2:00)上对其进行了测试,并且全小时返回
  • date_default_timezone_get() 返回什么?
  • $time_test 这里是一个错字我的时区是 +5:30 date('P') 给了我这个。而且我也认为这是罪魁祸首,因为我的模运算符返回的 no 比应该正确的多 30*60 秒。
  • 您的问题肯定与时区有关 - 在您发现问题所在时很有用。我想您应该在执行减法的同一表达式中添加您的时区的分钟部分所暗示的秒数。对于具有整数偏移量的时区中的大多数世界,这是一个无操作(加 0);对于印度(或尼泊尔、不丹或纽芬兰)的人们来说,这将改变世界。

标签: php math time timezone


【解决方案1】:

只需使用date 而不打印会议记录,例如:

print date('d m Y H') . ':00';

【讨论】:

    【解决方案2】:

    你不能这样做吗:

    $now = time();
    echo date('d m Y H', $now) . ':00';
    
    // or just
    
    echo date('d m Y H') . ':00';
    

    ?

    它会打印你当前的小时和假分钟。

    如果您想使用该时间戳,您可以使用strtotime 函数对其进行转换。

    $date = date('d m Y H') . ':00';
    $timestamp = strtotime($date);
    

    【讨论】:

    • 我最初是这样做的,并且确实有效。但这似乎是一个 hack :P 想要以“正确”的方式来做......
    • @这是正确的方法 :) 这对我来说很好 :P 认为我会坚持下去!已经在这么小的事情上浪费了太多时间。谢谢大家...
    【解决方案3】:

    您要查找的函数是floor。我认为以下工作如您所愿:

    $time_now = floor(time() / 3600) * 3600;
    print date('d-m-Y H:i', $time_now);
    

    【讨论】:

    • 不走运,看下面的例子:16-08-2010 19:19 变成 16-08-2010 18:30
    【解决方案4】:
    $d = strtotime($date);
    $rounded = intval($d / 3600) * 3600;
    $formatted_rounded = date('Y-m-d H:i:s', $rounded)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 2021-09-30
      • 2017-12-26
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      相关资源
      最近更新 更多