我有这种形式的日期 - - 20160428000000
(2016年4月28日),即年月日......添加天至一个月一个月PHP的最后一天不超过
我需要,如果某些天(例如3)是加入到这个日期 - 它应该添加它们,但不能超过一个月(04) - 预期产出 - 20160430000000
- 4月30日
同样,20160226000000
+5天应该返回20160229000000
即闰年二月也就是说,它不应该跳到另一个月。
任何提示/想法?
我有这种形式的日期 - - 20160428000000
(2016年4月28日),即年月日......添加天至一个月一个月PHP的最后一天不超过
我需要,如果某些天(例如3)是加入到这个日期 - 它应该添加它们,但不能超过一个月(04) - 预期产出 - 20160430000000
- 4月30日
同样,20160226000000
+5天应该返回20160229000000
即闰年二月也就是说,它不应该跳到另一个月。
任何提示/想法?
另一种方法是使用DateTime
类来检查出来:
首先创建对象直通输入。然后,设置月份对象的结束日期。
之后,进行添加,然后检查是否超过结束日。如果是的话,将其设置到最后,如果没有,那么得到的加法的结果:
$day = 5; // days to be added
$date = '20160226000000'; // input date
$dt = DateTime::createFromFormat('YmdHis', $date); // create the input date
$end = clone $dt; // clone/copy the input
$end->modify('last day of this month'); // and set it to last day
$dt->add(DateInterval::createFromDateString("+{$day} days")); // add x days
// make comparision
$final_date = ($dt > $end) ? $end->format('YmdHis') : $dt->format('YmdHis');
echo $final_date;
不错,优雅! +1 – mitkosoft
这也可以,非常感谢 – jitendrapurohit
我正在使用'DateTimeImmutable'提出类似的建议,但它基本上是相同的逻辑。 +1 :) – Narf
为此,您可以尝试这样的:
$given_date = 20160428000000;
$no_of_day = 3;
if(date('m',strtotime($given_date)) < date('m',strtotime($given_date ." +".$no_of_day."days"))){
echo "Exceeded to next month <br/>";
echo "Last date of month should be: ".date("t M Y", strtotime($given_date));
}
else {
echo "Next date will be after ".$no_of_day." day(s)<br/>";
echo date('d M Y',strtotime($given_date ." +".$no_of_day."days"));
}
如果一个月会跳转到下个月,然后它会显示当月最后日期。 其他方面,它会显示延长天数后的日期。
谢谢,但这会给我最后的日期 - 4月30日? – jitendrapurohit
@jitendrapurohit!是的,它会尝试。 – Yash
是的,它的工作原理!谢谢 – jitendrapurohit
如果添加的日期超过最后一天,将选择的最后一天,新的日期。
<?php
$date_orig = 20160226000000;
$add_day = 5; # No. of days to add
$added_date = strtotime($date_orig. ' + '.$add_day.' days'); // Add $add_day to $date_orig
$last_date = strtotime(date("YmtHis", strtotime($date_orig))); // Last day of $date_orig
$new_date = ($added_date > $last_date) ? $last_date : $added_date; // check the added date exceeds the last date
$new_date_format = date("YmdHis", $new_date); // Format Date
echo $new_date_format;
?>
获取您的日期和该月的最后一个日期之间的时间间隔。如果此间隔小于给定的添加时间间隔,则返回该月份的最后一天。 – mitkosoft