Php将日历月份添加到日期

时间:2017-03-31 16:44:32

标签: javascript php date calendar

我想在某个日期添加一些日历月。我已经在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中重现它

欢迎任何建议

2 个答案:

答案 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)

使用DateTimeDateInterval PHP类很容易。

以下代码将采用格式化为&#34; Y-m-d&#34;的字符串。 (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