【问题标题】:How to check if month exist in specific period using PHP如何使用PHP检查特定时期是否存在月份
【发布时间】:2015-12-30 21:22:35
【问题描述】:

如何检查特定时期是否存在月份($date1 和 $date2)

$month = '2016-01';
$date1 = '2016-01-05';
$date2 = '2016-02-04;

【问题讨论】:

  • 您能否更明确地定义“如果 $month 存在于两个日期之间”的含义?例如,您是否在寻求一种方法来确定特定日期 2016-01-01 是否出现在 $date1 和 $date2 之间?
  • 不,我想知道 2016 年的 01 月是否存在于 $date1 和 $date2 之间?
  • 好的,但是“介于”对您来说究竟意味着什么?例如,如果 $date1 是 2015-12-30 而 $date2 是 2016-01-02,那么 01 月是否存在于它们之间?如果 $date1 是 2016-01-29 并且 $date2 是 2016-01-30,那么 01 月是否存在于它们“之间”?如果 $date1 是 2016-01-30 并且 $date2 是 2016-02-15,那么 01 月是否存在于它们“之间”?看到您的问题固有的潜在歧义了吗?
  • 抱歉我的英语不好我将问题编辑为如何检查特定时期或在此期间是否存在月份(2016-01-05 至 2016-02-04)

标签: php date


【解决方案1】:

首先将月份转换为日期,例如当月的第一天。然后您可以比较日期以检查月份是否介于两者之间:

$month_day = date ('Y-m-01', strtotime($month) );
$date1_day = date ('Y-m-01', strtotime($date1) );
$date2_day = date ('Y-m-01', strtotime($date2) );

if ( ($month_day >= min($date1_day, $date2_day)) 
      && ($month_day <= max($date1_day, $date2_day)) ) 
    { }

【讨论】:

  • 我注意到您更改了月初至今,然后如果我检查日期 2016-01-01 介于(2016-01-05 和 2016-02-04)之间,它将返回 false,但月份 01已经存在于 2 个日期之间我想检查 MONTH 是否存在而不是日期
  • 这里是更正的版本。这次我已经测试过了:)它可以工作。
  • 像魅力一样完美工作
【解决方案2】:

我在他的链接The Answer上得到了我的问题的最佳答案

这个答案在两个日期之间有几个月

$start    = (new DateTime('2016-01-05'))->modify('first day of this month');
$end      = (new DateTime('2016-02-04'))->modify('first day of this month');
$interval = DateInterval::createFromDateString('1 month');
$period   = new DatePeriod($start, $interval, $end);
$monthsArray = [];
foreach ($period as $dt) {
    $monthsArray[] = $dt->format("Y-m"); // I put months exist in this period on array to check later if the $month exist on this array or not 
}

【讨论】:

    【解决方案3】:

    您可以使用 strpos() 搜索字符串。 http://php.net/manual/en/function.strpos.php

    例如:

    if (strpos($date1,$month) || strpos($date2,$month)){/* do stuff */}
    

    【讨论】:

    • 小心,因为这仅在月份与开始或结束月份相同时才有效。如果所需的月份介于两者之间,它将不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 2020-01-16
    相关资源
    最近更新 更多