gpt4 book ai didi

php - 返回两个 PHP DatePeriods 之间的重叠分钟数

转载 作者:可可西里 更新时间:2023-11-01 00:08:37 24 4
gpt4 key购买 nike

我刚问了这个问题,它被标记为已经回答,但这样做的人显然不明白这个问题。

这篇文章被标记为对此的重复问题,

How to get time difference in minutes in PHP ,

但它们甚至完全不同。

我正在寻找两个 DatePeriods 中的重叠 时间量,而不是两个日期之间的差异。

“DatePeriod”由两个日期组成,我正在寻找两个 DatePeriod 之间的重叠量。

我发现另一个帖子在这里回答了我一半的问题,

Determine Whether Two Date Ranges Overlap

它工作得很好,但它没有给我两个日期范围之间的时间重叠量。它只确定它们是否重叠。我需要知道它们重叠的分钟数。所以这是我原来的问题...

我以为会有一个非常简单的方法来做到这一点,但我已经找遍了,找不到解决方案。逻辑很简单:在给定两个 DatePeriods 的情况下找出重叠的分钟数。

例如,

-我将 $startDate1$endDate1 作为第一个日期范围。

-我将 $startDate2$endDate2 作为第二个日期范围。

(为了演示,格式为'Y-m-d H:i'。)

  • 假设 $startDate1 = '2015-09-11 09:15'$endDate1 = '2015-09-13 11:30'

  • 假设 $startDate2 = '2015-09-13 10:45'$endDate2 = '2015-09-14 12:00'

我希望得到 45 分钟 重叠的结果。如何实现?

我已经看到这是使用两个 DateTime 完成的,但这不是我想要的。

一个 datePeriod 由两个 DateTimes 组成,我正在寻找两个 DatePeriods 之间的区别。

最佳答案

正如我在评论中所解释的那样,有四个步骤。

  1. 计算较晚的开始日期;在此之前,重叠是不可能的。
  2. 计算较早的结束日期;之后就不可能重叠了。
  3. 用较早的结束日期减去较晚的开始日期。
  4. 检查结果。如果它是零或更大,那就是你的答案。如果它是否定的,那么你的答案是零;这意味着第二个时期直到第一个时期结束才开始。

这里有一个函数可以做你想做的事:

/**
* What is the overlap, in minutes, of two time periods?
*
* @param $startDate1 string
* @param $endDate1 string
* @param $startDate2 string
* @param $endDate2 string
* @returns int Overlap in minutes
*/
function overlapInMinutes($startDate1, $endDate1, $startDate2, $endDate2)
{
// Figure out which is the later start time
$lastStart = $startDate1 >= $startDate2 ? $startDate1 : $startDate2;
// Convert that to an integer
$lastStart = strtotime($lastStart);

// Figure out which is the earlier end time
$firstEnd = $endDate1 <= $endDate2 ? $endDate1 : $endDate2;
// Convert that to an integer
$firstEnd = strtotime($firstEnd);

// Subtract the two, divide by 60 to convert seconds to minutes, and round down
$overlap = floor( ($firstEnd - $lastStart) / 60 );

// If the answer is greater than 0 use it.
// If not, there is no overlap.
return $overlap > 0 ? $overlap : 0;
}

示例用途:

$startDate1 = '2015-09-11 09:15';
$endDate1 = '2015-09-13 11:30';
$startDate2 = '2015-09-13 10:45';
$endDate2 = '2015-09-14 12:00';

echo overlapInMinutes($startDate1, $endDate1, $startDate2, $endDate2) . "\n";
// echoes 45

$startDate1 = '2015-09-11 09:15';
$endDate1 = '2015-09-13 11:30';
$startDate2 = '2015-09-13 12:45';
$endDate2 = '2015-09-14 12:00';

echo overlapInMinutes($startDate1, $endDate1, $startDate2, $endDate2) . "\n";
// echoes 0

关于php - 返回两个 PHP DatePeriods 之间的重叠分钟数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33270716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com