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

本文概述

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

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

注意

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

四舍五入到最接近的间隔

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

/**

* 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

);

}

可以这样使用:

$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对象的分钟数小于最大间隔, 则使用较小的间隔:

$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");

四舍五入到最大间隔

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

/**

* 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

);

}

可以这样使用:

$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");

四舍五入到最低间隔

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

/**

* 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

);

}

可以这样使用:

$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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值