本文概述
在某些应用程序中, 对于具有标准化方法的要求苛刻的应用程序, 将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");
编码愉快!
评论前必须登录!
注册