将一个 DateInterval 除以另一个
Posted
技术标签:
【中文标题】将一个 DateInterval 除以另一个【英文标题】:dividing one DateInterval by another 【发布时间】:2017-12-01 13:51:48 【问题描述】:假设我有一个 DateInterval 是 1 年,另一个是 3 个月。
有没有可能一一相除得到4的答案,即1年的间隔有4个3个月的间隔?
【问题讨论】:
问题:您希望1 month divided by 7 days
返回什么?
可能有办法完成这项工作。您可以发布 2 或 3 个示例来说明您想要实现的目标吗?示例:var $datainterval = 4; $month = 3 结果 = 4。
@CarlosR 我认为您的意思是“实现”而不是“归档”。 ;D
【参考方案1】:
日期不易用于数学运算。我们可以做加法和减法,仅此而已。乘法没有什么意义(1 个月乘以 12 个月 = 1 平方年?)但除法可以理解为“这个区间有多少?”可以通过重复减法来实现。
为now
创建一个DateTimeImmutable
。 add
您尝试对其执行除法的第一个间隔。然后,subtract
第二个间隔,直到您获得小于(或等于)原始DateTimeImmutable
的新日期/时间。计算这需要多少次。那是你的部门答案。
【讨论】:
【参考方案2】:您可以尝试将您的 DateInterval
s 转换为秒并除以:
$dateInterval1 = new DateInterval('P1Y');
$dateInterval2 = new DateInterval('P3M');
$dateInterval1Secs = date_create('@0')->add($dateInterval1)->getTimestamp();
$dateInterval2Secs = date_create('@0')->add($dateInterval2)->getTimestamp();
var_dump($dateInterval1Secs / $dateInterval2Secs);
当然,这个确实很精确,这段代码输出4.0555555555556
从Convert DateInterval object to seconds in php 转换为秒
【讨论】:
【参考方案3】:直接不,因为DateInterval
是一个对象。根据this 回答,这样的事情可能会有所帮助
$y = new DateTime('@0');
$x = new DateTime('@0');
$secondsOfYear = $y->add(new DateInterval('P1Y'))->getTimestamp();
$secondsOfThreeMonths = $x->add(new DateInterval('P3M'))->getTimestamp();
print_r([$secondsOfYear,$secondsOfThreeMonths,(int)($secondsOfYear/$secondsOfThreeMonths)]);
// output
Array
(
[0] => 31536000
[1] => 7776000
[2] => 4
)
查看PHP Sandbox
【讨论】:
以上是关于将一个 DateInterval 除以另一个的主要内容,如果未能解决你的问题,请参考以下文章
如何将来自一个 SQL 选择的聚合值除以来自另一个 SQL 选择的聚合值?
将具有多索引的一个 DF 中的值除以另一个 DF 中的值并绘制结果