【问题标题】:How can I use PHP date to display certain elements?如何使用 PHP 日期显示某些元素?
【发布时间】:2019-11-21 11:15:40
【问题描述】:

我正在尝试创建一个具有开始和结束日期的 PHP 循环,但也会将当前日期与只能在特定日期触发的 div 进行比较。我有每个 div 的点击事件来添加类等。

这个想法是用于日历,所以我需要日期从 12 月 1 日开始,到 24 日结束,每个 div 都有自己的验证,所以它之前无法打开它的设定日期,如果当前日期已超过其设定日期,则添加不同的类。

这是我目前所拥有的:

<?php

$current = date('d-m-y');
$start = '01-12-19';
$end = '24-12-19';
$datecount = 1; 
$countstart = "01-12-19"; 

if ($start <= $curent && $end >= $current) {

switch ($datecount) {
    case 1:
        break;
    case 2:
        date(d-m-y, strtotime($countstart. ' + 1 day'));
        $datecount ++;
        echo "
        <script type=\"text/javascript\">
        $('#door1').removeClaas('blocked');
        </script>
        ";
        break;
    case 3:
        date(d-m-y, strtotime($countstart. ' + 2 day'));
        $datecount ++;
        break;   
    case 4:
        date(d-m-y, strtotime($countstart. ' + 3 day'));
        $datecount ++;
        break;
    case 5:
        date(d-m-y, strtotime($countstart. ' + 4 day'));
        $datecount ++;
        break;          
}

}


?>

我在正确的轨道上吗?我最好在 JS 中尝试一下吗?

【问题讨论】:

    标签: php date validation


    【解决方案1】:

    我会采取不同的方式:

    创建一个包含所有日期的数组,如下所示:

    $decemberDays = array();
    $decemberDays[1]["message"] = "Yeah! December first!";
    $decemberDays[2]["message"] = "23 more days to Xmas!";
    ...
    $decemberDays[24]["message"] = "Xmas eve!";
    

    然后我会简单地遍历数组直到当前日期:

    $month = date('n'); // "n" is the month without leading zeros
    if ($month === 12){
       $day = date('j'); //"j" is the day without leading zeros
       for ($i = 1; $i<=$day; $i++){
           echo "<div>Dec $i: $decemberDays[$i]['message']</div>";
       }
    }
    

    您可以简单地找出需要哪些 div 并只创建那些,而不是添加 div 并在之后删除它们。

    (我没有测试代码,只是为了演示这个想法)。

    【讨论】:

      【解决方案2】:

      您可以根据所需条件呈现您的标记。 在DateTimeDateIntervalDatePeriod 类的帮助下,您可以生成降临节日历的日期。 然后使用array_mapclosure 可以设置必要的标记:

      $start = new DateTime('2019-12-01');
      $end = new DateTime('2019-12-24');
      $end = $end->modify('+1 day');
      $today = new DateTime('2019-12-04');
      
      $interval = new DateInterval('P1D');
      $range = new DatePeriod($start, $interval, $end);
      
      $markup = array_map(function($date) use ($today) {
          return sprintf('<div%s>%s</div>', ($date->format('Y-m-d') <= $today->format('Y-m-d')) ? '' : ' class="blocked"', $date->format('Y-m-d'));
      }, iterator_to_array($range));
      
      print_r($markup);
      

      注意:您可以使用new DateTime('TODAY'); 作为今天的日期。

      结果是一个带有所需标记的数组,你只需要implode它:

      [0] => <div>2019-12-01</div>
      [1] => <div>2019-12-02</div>
      [2] => <div>2019-12-03</div>
      [3] => <div>2019-12-04</div>
      [4] => <div class="blocked">2019-12-05</div>
      [5] => <div class="blocked">2019-12-06</div>
      [6] => <div class="blocked">2019-12-07</div>
      [7] => <div class="blocked">2019-12-08</div>
      [8] => <div class="blocked">2019-12-09</div>
      [9] => <div class="blocked">2019-12-10</div>
      [10] => <div class="blocked">2019-12-11</div>
      [11] => <div class="blocked">2019-12-12</div>
      [12] => <div class="blocked">2019-12-13</div>
      [13] => <div class="blocked">2019-12-14</div>
      [14] => <div class="blocked">2019-12-15</div>
      [15] => <div class="blocked">2019-12-16</div>
      [16] => <div class="blocked">2019-12-17</div>
      [17] => <div class="blocked">2019-12-18</div>
      [18] => <div class="blocked">2019-12-19</div>
      [19] => <div class="blocked">2019-12-20</div>
      [20] => <div class="blocked">2019-12-21</div>
      [21] => <div class="blocked">2019-12-22</div>
      [22] => <div class="blocked">2019-12-23</div>
      [23] => <div class="blocked">2019-12-24</div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-10
        相关资源
        最近更新 更多