个性化阅读
专注于IT技术分析

如何在PHP中将日期时间四舍五入到最接近的10或5分钟

本文概述

在某些应用程序中, 对于具有标准化方法的要求苛刻的应用程序, 将DateTime对象存储在数据库中是绝对的技术。但是, 从哪个意义上说呢?它们需要以某种特定的格式存储, 关心准确性和严格性。让我们以调度程序应用程序为例, 该应用程序以5分钟为间隔显示事件, 此日历仅接受5:25、6:45等格式的事件时间。如果显示了其他时间, 则日历将失败, 因此由服务器端提供正确的时间格式。使用PHP的DateTime类可以很容易地修改日期, 但是将DateTime对象的时间舍入某个时间间隔(例如5或10分钟)不是很直观。

在本文中, 我们将与你分享3种方法, 这些方法将帮助你轻松地将DateTime对象的时间四舍五入到最接近的时间间隔(最高或最低)。

注意

这三种方法默认都以10分钟为间隔, 你可以根据需要更改它, 例如5、20等。只需将间隔更改为函数的第二个参数即可!

四舍五入到最接近的间隔

以下函数将日期时间对象的分钟四舍五入到最接近的给定间隔:

<?php 

/**
 * Round minutes to the nearest interval of a DateTime object.
 * 
 * @param \DateTime $dateTime
 * @param int $minuteInterval
 * @return \DateTime
 */
public function roundToNearestMinuteInterval(\DateTime $dateTime, $minuteInterval = 10)
{
    return $dateTime->setTime(
        $dateTime->format('H'), round($dateTime->format('i') / $minuteInterval) * $minuteInterval, 0
    );
}

可以这样使用:

<?php 

$date = new DateTime("2018-06-27 20:37:00");

$date = roundToNearestMinuteInterval($date);

// Rounded from 37 minutes to 40
//  2018-06-27 20:40:00
echo $date->format("Y-m-d H:i:s");

或者, 如果datetime对象的分钟数小于最大间隔, 则使用较小的间隔:

<?php 

$date = new DateTime("2018-06-27 20:33:00");

$date = roundToNearestMinuteInterval($date);

// Rounded from 33 minutes to 30
//  2018-06-27 20:30:00
echo $date->format("Y-m-d H:i:s");

四舍五入到最大间隔

以下函数将日期时间对象的分钟四舍五入到给定的最大间隔:

<?php 

/**
 * Round up minutes to the nearest upper interval of a DateTime object.
 * 
 * @param \DateTime $dateTime
 * @param int $minuteInterval
 * @return \DateTime
 */
public function roundUpToMinuteInterval(\DateTime $dateTime, $minuteInterval = 10)
{
    return $dateTime->setTime(
        $dateTime->format('H'), ceil($dateTime->format('i') / $minuteInterval) * $minuteInterval, 0
    );
}

可以这样使用:

<?php 

$date = new DateTime("2018-06-27 20:37:00");

$date = roundUpToMinuteInterval($date);

// Rounded from 37 minutes to 40
//  2018-06-27 20:40:00
echo $date->format("Y-m-d H:i:s");

四舍五入到最低间隔

以下函数将日期时间对象的分钟四舍五入到给定的最小间隔:

<?php

/**
 * Round down minutes to the nearest lower interval of a DateTime object.
 * 
 * @param \DateTime $dateTime
 * @param int $minuteInterval
 * @return \DateTime
 */
public function roundDownToMinuteInterval(\DateTime $dateTime, $minuteInterval = 10)
{
    return $dateTime->setTime(
        $dateTime->format('H'), floor($dateTime->format('i') / $minuteInterval) * $minuteInterval, 0
    );
}

可以这样使用:

<?php 

$date = new DateTime("2018-06-27 20:33:00");

$date = roundDownToMinuteInterval($date);

// Rounded from 33 minutes to 30
//  2018-06-27 20:30:00
echo $date->format("Y-m-d H:i:s");

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何在PHP中将日期时间四舍五入到最接近的10或5分钟

评论 抢沙发

评论前必须登录!