【问题标题】:How to get every 15th and last day of the month in PHP如何在 PHP 中获取每个月的第 15 天和最后一天
【发布时间】:2015-11-09 06:41:07
【问题描述】:

我正在尝试弄清楚如何将我的日期设置为仅每 15 日和月末......到目前为止,我所得到的距离我当前日期只有 +15 天...... 当前日期 = 今天的日期。逻辑:如果当前日期小于 15,则循环的开始日期为月末,如果当前日期等于或大于 15,则循环的开始日期为15 日。所以就我而言,我当前的日期是 11 月 9 日,所以第一个输出应该是 11 月 30 日。

$y = 1;
while ($y <= $num_term) { // num_term is equal to the number of output
    $month_line = strtotime("15 day", strtotime("$month_sched"));
    $day = date("d", $month_line);
    $month_int = date("M-d", $month_line);
} 

输出:

Nov 24`<br />`
Dec 9`<br />`
Dec 24`<br />`

谁能帮帮我...谢谢:)

【问题讨论】:

  • 变量“$month_sched”的可能值是多少?
  • $month_sched 是像 Nov 一样的月份

标签: php date


【解决方案1】:

试试这个

  1. 查找月份的第一天
  2. 按照 Lalji Nakum 的说法找到一个月的最后一天
  3. 用每月的第 15 天检查您的日期,如下例所示
if($today < $hDay){
    echo 'Start : '. date("t-m-Y");
}else if ($today >= $hDay){
    echo 'Start :'. $hDay;
}

这里, 1. $today 将是当前日期, 2. $hDay 将是一个月的第 15 天,如 11 月 15 日

这里是示例代码

echo 'First day of month '.
$fDay = date('01-m-Y');
echo '<br> 15th day of month '.
$hDay = date('d-m-Y', (strtotime($fDay)+ (86400 * 15)));
echo '<br> Last Day of month '.
$lDay = date("t-m-Y");

echo '<br> Current day '.
$today = date('d-m-Y');
//$today =  date('d-m-Y', strtotime($hDay)+86400 );
echo '<br>'; 
if($today < $hDay){
    echo 'Start : '. $lDay = date("t-m-Y");
}else if ($today >= $hDay){
    echo 'Start :'. $hDay;
}

【讨论】:

  • 它只显示 11 月 30 日...如果我希望输出变为 11 月 30 日、12 月 15 日、12 月 31 日等等,我该如何编码...
  • 是的,它只适用于当月,你可以将它添加到一个循环中,这样你就可以获得你想要的输出输出
【解决方案2】:

您可以通过

获得一个月的总天数
<?php
   $a_date = "2015-11-09";
   echo totaldays = date("t", strtotime($a_date));
?>

您可以从当前日期获取当前日期:

<?php
   echo curday = date('d');
   if(curday==totaldays){
     echo "lastday";
   }
   if(curday==15)
   {
     echo "15th day";
   }
?>

【讨论】:

    【解决方案3】:

    找到第 15 个:strtotime($month_sched." +14 day");

    查找一个月的最后一天:strtotime($month_sched." next month - 1 hour");

    请尝试以下代码:

    <?php
    $y=1;
    $num_term = 10;
    //start date
    $month_sched = date("2012-02-01");
    while($y <= $num_term) {
        //15th
        $month_line_15 = strtotime($month_sched." +14 day");
        //last day of month
        $month_line_last = strtotime($month_sched." next month - 1 hour");
        $day = date("M-d", $month_line_15);
        $month_int = date("M-d", $month_line_last);
        $month_sched = date("Y-m-d",strtotime($month_sched." +1month"));
        $y++;
    }
    

    经过测试。

    PHPFiddle

    【讨论】:

    • $month_sched 不固定...$month_sched 将是当前日期,例如今天是 11 月 9 日,因此第一个输出将是 11 月 23 日,因此输出不能具有 15 - 30 序列。呵呵
    【解决方案4】:

    您可以将 mktime 与 0 和 15 一起用作当天的值:

    $a = date("m-d", mktime(0,0,0,$month,0));
    $b = date("m-d", mktime(0,0,0,$month,15));
    

    这将为您提供上个月的最后一天和 $month 的 15 日

    【讨论】:

    【解决方案5】:

    这个答案可能已经足够了。我也想提供一个答案。

    $beginDate = new DateTime('15 January');
    
    // clone start date
    $endDate = clone $beginDate;
    
    // Add 1 year to start date
    $endDate->modify('+1 year');
    
    // Increase with an interval of one month
    $dateInterval = new DateInterval('P1M');
    
    $dateRange = new DatePeriod($beginDate, $dateInterval, $endDate);
    
    foreach ($dateRange as $day) {
        echo $day->format('Y-m-d')."<br />"; // 15th
        echo $day->format('Y-m-t')."<br />"; // Last month day
    }
    

    参考文献

    PHP 手册 - DateTime

    PHP 手册 - DateInterval

    PHP 手册 - DatePeriod

    PHP 手册 - clone

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多