Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP';结束日期';从给定的';开始日期';-最后一天/次月15日_Php_Date - Fatal编程技术网

PHP';结束日期';从给定的';开始日期';-最后一天/次月15日

PHP';结束日期';从给定的';开始日期';-最后一天/次月15日,php,date,Php,Date,我想从PHP中给定的“开始日期”中获取“结束日期”。结束日期以开始日期为基础,计算如下: 如果开始日期为当月的1-15日,则结束日期为下个月的15日 如果开始日期为当月16-31日,则结束日期为下个月的最后一天 例如:$start_date='2009-11-23' 这行吗 $start_timestamp = strtotime('2009-11-17'); $d1 = getdate($start_timestamp); $end_timestamp = mktime( 0,

我想从PHP中给定的“开始日期”中获取“结束日期”。结束日期以开始日期为基础,计算如下:

如果开始日期为当月的1-15日,则结束日期为下个月的15日

如果开始日期为当月16-31日,则结束日期为下个月的最后一天

例如:$start_date='2009-11-23'

这行吗

$start_timestamp = strtotime('2009-11-17');
$d1 = getdate($start_timestamp);

$end_timestamp = mktime(
    0,
    0,
    0,
    $d1['mon'] + 1 + floor($d1['mday']/16),   // 1 before the 16th, then 2
    15 * (1-floor($d1['mday']/16)),        //15 before the 16th, then 0
    $d1['year']
);
$end_date = date('Y-m-d', $end_timestamp);

下面是另一种方法:

$dt = new DateTime($start_date);
if ($dt->format('d') > 15) {
    $day = 'last day';
} else {
    $day = (15 - $dt->format('d')) . ' days';
}
echo $dt->modify('next month ' . $day)->format('Y-m-d');

我注意到:在第一行遇到一个格式不正确的数值indate.php对不起,我的代码使用了时间戳。修改并测试了它。mktime函数的第四个参数应该是$d1['mon']+1+下限($d1['mday']/16),而不是$d1['month']+1+下限($d1['mday']/16),后者将在moth部分生成01