【问题标题】:PHP 'end date' from a given 'start date' - last day/15th of the following month给定“开始日期”的PHP“结束日期”-下个月的最后一天/ 15日
【发布时间】:2012-04-30 08:49:57
【问题描述】:

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

如果开始日期是每月 1 日至 15 日,则结束日期是下个月的 15 日。

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

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

【问题讨论】:

    标签: php date


    【解决方案1】:

    这行得通吗?

    $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);
    

    【讨论】:

    • 我收到通知:在第一行遇到 indate.php 格式不正确的数值
    • 抱歉,我的代码使用了时间戳。更改并测试它。
    • 小修正,mktime 函数的第四个参数应该是 $d1['mon'] + 1 + floor($d1['mday']/16) 而不是 $d1['month'] + 1 + floor($d1['mday']/16),后者总是会在飞蛾部分生成01
    【解决方案2】:

    这是另一种方法:

    $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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多