我做了一个做很多事情的应用程序,但这里重要的是,它需要一个开始日期,并且根据频率和持续时间,它会将日期修改为这个月数。
例如:
$startingDate = new DateTime('2000-01-31');
$duration = 190;
$frequency = 12; //(monthly)
//So, if frequency is monthly, this date will iterative change 190 times by one month
如果我的开始日期是 1 月 31 日,并且我添加了 1 个月,它将返回 3 月 2 日的日期。 我正在尝试制作一个脚本,以这种方式添加日期:
starting date : 31/01/2000
+1 month = 29/02/2000
+2 months = 31/03/2000
+3 months = 30/04/2000
....
+13 months = 28/02/2001
另一种情况:
Starting date : 28/02/2001
+1 month : 31/03/2001
+2 months : 30/04/2001
...
所以,这个想法是..如果开始日期是当前月份的最后一天,结束日期必须是月份的最后一天。
所以,这是我的代码:
// $date came from object
for($i = 0; $i < $duration; $i++){
//calculation stuff
$this->array[$i] = array(
'Date' => $date->format('d/m/y'),
'Capital' => $capital,
'Rate' => $rate,
);
$capital = $remaining;
//end of calculation stuff
$months = (12/$frequency). ' months';
$h = 12/$frequency;
$currentDay = $date->format('d');
if($currentDay == $date->format('t') ) {
if ( $h == 1) {
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
}
if ( $h == 6) {
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
}
if ( $h == 4) {
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
$date->modify('last day of next month');
}
if ( $h == 12) {
$date->modify('last day of next ');
}
} else {
$date->modify($months);
}
}//for
使用此代码,当我输入开始日期 2000 年 1 月 31 日(本月的最后一天(时,它会以正确的方式为我提供下一个值:
29/02/00,
31/03/00,
...
28/02/01
...
当我输入开始日期 29/02/2000 和频率 = 2(半年(时,它给我:
29/02/00,
31/08/00,
28/02/00,
31/08/01 // (right calculations)
这是一个错误: 当我输入开始日期 28/02/2000(不是本月的最后一天(时,它给了我:
28/02/00,
28/08/00,
28/02/01 //(last day in this month),
31/08/01,
28/02/02,
31/08/02,
... //Error here.
当我输入 30/04/2000 和频率每月 (12( 时,它给我:
30/04/2000,
30/05/2000,
30/06/2000,
30/07/2000,
30/08/2000,
...
30/01/2001,
02/03/2001,
02/04/2001,
02/05,2001
...
如何修复此错误和/或升级代码?
"t" 返回给定日期的月份中的天数:
$a_date = "2017-07-23";
echo date("Y-m-t", strtotime($a_date));