【问题标题】:Php add calendar months to a datephp 添加日历月份到日期
【发布时间】:2017-03-31 16:44:32
【问题描述】:

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

欢迎任何建议

【问题讨论】:

标签: javascript php date calendar


【解决方案1】:

使用checkdate() 检查日期是否有效日期为公历日期。然后如果不存在,则从日期中减去 1 天(24 小时),然后再次检查是否存在。就像下面的代码一样,不使用任何类(纯 PHP)。

这里是 PHP 中的 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()

注意:这是保存月份日期的代码,回答您的问题“如果日期存在,我希望, 在其他情况下是一个月的最后一天...."

【讨论】:

    【解决方案2】:

    使用DateTimeDateInterval PHP 类很容易。

    以下代码将采用格式为“Y-m-d”的字符串(4 位数年份,2 位数月份,2 位数日期,破折号分隔)将其转换为 DateTime 对象,添加 6 个月,然后返回 @987654328 @按原格式转成字符串。

    代码实际上是不言自明的......

    <?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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多