我知道这很疯狂,但我仍然在寻求你的解决方案。
现在,我有两个日期:假设开始日期:2017-02-01和结束日期:2017-04-01。
如果我将结束日期与开始日期进行比较,我当然会得到60天(其中包括2017-02-01的一天)。
假设我不知道这两个月之间的月份和月份是多少天。呃...无论如何要确定日期和月份......很清楚?
这样的事情:
我只能在PHP中找到两个日期之间的日子,当然它比这个更容易。我认为这个已经涵盖了数组概念,已经超出了我的IQ XD。
我需要你的帮助,通过解决这个问题证明你自己,非常感谢你!非常感谢。
更简单:我想找到的是 - 我不想找到两个日期之间的那一天,我想找到这两个日期之间每月的月份和天数。
P / S:我没有任何代码,因为我甚至不知道如何开始编码。
答案 0 :(得分:2)
您可以使用date_diff函数。 date_diff函数计算两个日期之间的日期,因此您可以添加2来计算您的日期..
modena.css
答案 1 :(得分:0)
PHP有一些非常强大的DateTime类和函数。
<?php
$start = new DateTime('2017-05-01');
$end = new DateTime('2017-07-03');
$interval = new DateInterval('P1D');
$period = new DatePeriod($start, $interval, $end);
$output = ['daysTotal' => 0, 'months' => []];
$months = [];
foreach ($period as $dt) {
if (!in_array($dt->format("F"), $months)) {
$month = ['name' => $dt->format("F"), 'days' => cal_days_in_month(CAL_GREGORIAN, $dt->format("n"), $dt->format("Y"))];
$output['months'][] = $month;
$months[] = $dt->format("F");
}
$output['daysTotal']++;
}
var_dump($output);
这将输出:
array(2) {
["daysTotal"]=>
int(63)
["months"]=>
array(3) {
[0]=>
array(2) {
["name"]=>
string(3) "May"
["days"]=>
int(31)
}
[1]=>
array(2) {
["name"]=>
string(4) "June"
["days"]=>
int(30)
}
[2]=>
array(2) {
["name"]=>
string(4) "July"
["days"]=>
int(31)
}
}
}
注意:如果您在2017-05-01和2017-06-01之间进行操作,则不会在月份数组中注册6月。
答案 2 :(得分:0)
试试这个
$from_date = "2017-02-01";
$to_date = "2017-04-01";
$start = $month = strtotime($from_date);
$tmp = cal_days_in_month(CAL_GREGORIAN,date('m',strtotime($to_date)),date('Y',strtotime($to_date)));
$end = strtotime(date('Y-m',strtotime($to_date)).'-'.$tmp);
while($month < $end){
$days = cal_days_in_month(CAL_GREGORIAN,date('m',$month),date('Y',$month));
if(date('m',$start) == date('m',$month)) {
$days = $days - date('d',$start) + 1;
} else if(date('m',$end) == date('m',$month)) {
$days = date('d',strtotime($to_date));
}
echo "Days :".$days." Month :".date('F',$month);
echo '<br>';
$month = strtotime("+1 month", $month);
}
输出将如下所示
Days :28 Month :February Days :31 Month :March Days :01 Month :April