php – 计算日期范围内的天数在另一个日期范围内
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 计算日期范围内的天数在另一个日期范围内,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2925字,纯文字阅读大概需要5分钟。
内容图文
![php – 计算日期范围内的天数在另一个日期范围内](/upload/InfoBanner/zyjiaocheng/800/b265232a0bfd481284b50c5cca75d73b.jpg)
从10月1日到3月31日,费用为1美元(第1季).从4月1日到9月30日,费用为2美元(第2季).
如何计算给定日期范围(用户输入)的总费用,具体取决于此日期范围属于第1季和第2季的天数?
以下给出了用户日期范围的天数,但我不知道如何测试第1季或第2季:
$user_input_start_date = getdate( $a );
$user_input_end_date = getdate( $b );
$start_date_new = mktime( 12, 0, 0, $user_input_start_date['mon'], $user_input_start_date['mday'], $user_input_start_date['year'] );
$end_date_new = mktime( 12, 0, 0, $user_input_end_date['mon'], $user_input_end_date['mday'], $user_input_end_date['year'] );
return round( abs( $start_date_new - $end_date_new ) / 86400 );
鉴于日期范围在2012年开始和结束,或者从2012年开始到2013年结束,这给了我10种不同的可能性,在这个季节中,日期范围可以开始,也可以结束.
必须有一个比迭代if / else更好的解决方案,并在以下条件下反复比较日期:
>日期范围完全在第1季
>日期范围从第1季开始,到第2季结束
>日期范围从第1季开始,跨越第2季,并在第1季的第二部分结束
……以及“第2季开始”等等
这不是How many days until X-Y-Z date?的重复,因为它只涉及计算天数.它没有解决将一个日期范围与另一个日期范围进行比较的问题.
解决方法:
这个问题的关键是尽可能地简化它.我认为使用数组作为查询表来获取一年中每一天的成本是可行的方法.首先要做的是生成数组.该数组仅代表一年中的每一天,并不代表任何特定年份.我选择使用2012来生成查找数组,因为它是闰年,因此每天都有可能.
function getSeasonArray()
{
/**
* I have chosen 2012 as it was a leap year. All we want to do is
* generate an array which has avery day of the year in it.
*/
$startDate = new DateTime('1st January 2012');
//DatePeriod always drops the last day.
$endDate = new DateTime('1st January 2013');
$season2Start = new DateTime('1st April 2012');
$season2End = new DateTime('1st October 2012');
$allDays = new DatePeriod($startDate, new DateInterval('P1D'), $endDate);
$season2Days = new DatePeriod($season2Start, new DateInterval('P1D'), $season2End);
$seasonArray = array();
foreach($allDays as $day){
$seasonArray[] = $day->format('d-M');
$seasonArray[$day->format('d-M')]['season'] = 1;
}
foreach($season2Days as $day){
$seasonArray[$day->format('d-M')]['season'] = 2;
}
return $seasonArray;
}
一旦完成,您只需要计算的时间段: –
$bookingStartDate = new DateTime();//Or wherever you get this from
$bookingEndDate = new DateTime();
$bookingEndDate->setTimestamp(strtotime('+ 7 month'));//Or wherever you get this from
$bookingPeriod = new DatePeriod($bookingStartDate, new DateInterval('P1D'), $bookingEndDate);
然后我们可以做计算: –
$seasons = getSeasonArray();
$totalCost = 0;
foreach($bookingPeriod as $day){
$totalCost += $seasons[$day->format('d-M')]['season'];
var_dump($day->format('d-M') . ' = $' . $seasons[$day->format('d-M')]['season']);
}
var_dump($totalCost);
我选择了较长的预订期限,以便您可以浏览var_dump()输出并验证一年中每一天的正确价格.
这是在工作中分散注意力之间的快速刺激,我确信通过一些思考,您可以将其塑造成更优雅的解决方案.我想摆脱双重迭代,不幸的是,工作压力使我无法在此花费更多时间.
有关这些有用类的更多信息,请参见PHP DateTime man page.
内容总结
以上是互联网集市为您收集整理的php – 计算日期范围内的天数在另一个日期范围内全部内容,希望文章能够帮你解决php – 计算日期范围内的天数在另一个日期范围内所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。