我想在某个日期添加一些日历月。我已经在javascript中完成了,但我会在Php中做同样的功能(我是新手)。 这是javascript代码:
var date = '2017-08-30';
var addMonth=6;
var arrDate = date.split("-");
var dateSrt = new Date(date);
var newSrvDate = new Date(dateSrt.getTime());
newSrvDate.setMonth(dateSrt.getMonth() + (addMonth), arrDate[2]);
if (newSrvDate.getMonth() > (dateSrt.getMonth() + (addMonth)) % 12) {
newSrvDate.setDate(0);
}
srvDay = new Date(newSrvDate.getFullYear(), newSrvDate.getMonth() , newSrvDate.getDate());
alert("Start:"+dateSrt);
alert("End:"+srvDay);
在这种情况下,如果我加入6个月到2017-08-30将是2018-02-30,但它不存在,所以它成为2018-03-02。 如果日期存在,我希望如此,在其他情况下,该月的最后一天......
我希望我清楚......代码在javascript中完美运行,但我无法在php中重现它
欢迎任何建议
答案 0 :(得分:0)
如果有效日期与格里高利日期有效,请与checkdate()
核对日期。然后如果不存在则从日期减去1天(24小时)并再次检查是否存在。就像下面的代码一样,不使用任何类(普通的PHP)。
这里是JS中的JS等效代码。
$date = '2017-08-30';
$newDate = strtotime($date)+6*30*24*60*60;
$exploded = explode('-',$date);
$month = $exploded[1];
$year = $exploded[0];
$day = $exploded[2];
$new_month = $exploded[1]+6;
if($new_month>12){
$month = $new_month-12;
$year = $year+1;
}
else{
$month = $new_month;
}
echo $year."-".$month."-".$day;
//Function to check date recursively.............
function check_date($year,$month,$day){
if(!checkdate($month,$day,$year)){
$day = $day-1;
return check_date($year,$month,$day);
}
else{
return $year."-".$month."-".$day;
}
}
$final_date = check_date($year,$month,$day);
echo date("Y-m-d",strtotime($final_date));
但我建议您查看DateTIme类,并查看date()
。
注意:这是保存月份日期的代码,回答代表您的问题" 我希望如果日期确实存在,在其他情况下是一个月的最后一天.... "
答案 1 :(得分:0)
使用DateTime
和DateInterval
PHP类很容易。
以下代码将采用格式化为" Y-m-d"的字符串。 (4位数年份,2位数月份,2位数字日期,短划线)将其转换为DateTime
对象,添加6个月,然后根据原始格式将DateTime
转回字符串。< / p>
代码实际上是自我解释的......
<?php
$dateStr = '2017-08-30';
$date = DateTime::createFromFormat( 'Y-m-d', $dateStr );
$interval = DateInterval::createFromDateString('6 months');
$date->add( $interval );
$dateStr = $date->format( 'Y-m-d' );
echo "$dateStr\n"; // outputs 2018-03-02
供您参考:
http://php.net/manual/en/class.datetime.php
http://php.net/manual/en/datetime.createfromformat.php
http://php.net/manual/en/datetime.add.php
http://php.net/manual/en/dateinterval.createfromdatestring.php