【问题标题】:print correct dates in php在php中打印正确的日期
【发布时间】:2019-06-18 18:50:58
【问题描述】:

我将整个代码放在这里。我想为一年中的每个不同日期(日)打印出不同的信息,如我的代码中所示。从我提出问题的第一天起,我就一直在尝试不同的 PHP 函数,但我似乎没有得到答案。一周中的每隔一天都可以正常工作,但周末(周六或周日)一直令人头疼。请在周末打印正确的日期是需要更好的程序员回答的问题。(例如,让我们以本周和下周的周末为例,我应该有以下打印:Happy Weekend,今天是 Saturday 2019-02- 09。在第二天是星期日,我应该打印出:Happy Weekend, today is Sunday 2019-02-10。同样下周周末应该是 2019-02- 16 和 2019-02-17 分别在周末的不同日子,但这并没有发生。我已经做了将近 1 个月,甚至在两周前在这里发布我的问题之前。帮助兄弟。

    $date = new DateTime('');   
      $datei = $date->format('Y-m-d');  
      $newYear = new DateTime('');
      $newYear_date = $newYear->format('2019-01-01');
      $ValentineS = new DateTime('');
      $valentineS_date = $ValentineS->format('2019-02-14');
      $WomenDay = new DateTime('');
      $WomenDay_date = $WomenDay->format('2019-03-08');
      /* ...other days not shown for brevity..*/
      /*...move to the weekends....*/
      $sat_begin = new DateTime('2019-01-21');
      $sat_end = new DateTime('2019-12-30');
      $sat_end = $sat_end->modify('+4 day');
      $sat_interval = new DateInterval('P1D');
      $sat_daterange = new DatePeriod($sat_begin, $sat_interval, $sat_end);
      $sun_begin = new DateTime('2019-01-22');
      $sun_end = new DateTime('2019-12-31');
      $sun_end = $sun_end->modify('+4 day');
      $sun_interval = new DateInterval('P1D');
      $sun_daterange = new DatePeriod($sun_begin, $sun_interval, $sun_end);
   foreach ($sat_daterange as $sat_date){

      $saturday = date('w', strtotime($sat_date->format('Y-m-d')));
        if ($saturday == 6 && $datei == $sat_date) {
      } 
  }foreach ($sun_daterange as $sun_date) {
     $sunday = date('w', strtotime($sun_date->format('Y-m-d')));
       if ($sunday == 0 && $datei == $sun_date) {
       }
     }
    switch ('Y-m-d') {
     case '2019-01-01':
     echo 'HAPPY NEW YEAR today is Tuesday 2019-01-01. A Public Holiday';
      break;
      case '2019-02-14':
      echo "HAPPY VALENTINE'S DAY , today is Thursday 2019-02-14 an observed 
       day, but NOT A PUBLIC HOLIDAY ";
       break;
      case '2019-03-08':
      echo "HAPPY WOMEN'S DAY , today is Friday 2019-03-08 an observed day to 
       recognize women, but NOT A PUBLIC HOLIDAY ";
       break;
       case $sat_date->format('Y-m-d'):
        echo 'HAPPY WEEKEND, today is '.'<b>'.'Saturday '.$sat_date->format("Y-m-d").'</b>'.'<br>' ;
        break;
      case $sun_date->format("Y-m-d"):
        echo 'HAPPY WEEKEND, today is '.'<b>'.'Sunday '.$sun_date->format("Y-m-d").'</b>'.'<br>' ;
        break;  
     default:
      echo "TODAY IS A WORKDAY, have a good day!".'<br>';
      break;

【问题讨论】:

标签: php arrays date


【解决方案1】:

你必须把你的区间代码放在for循环的范围内:

<?php

  $date = new DateTime();   
  $datei = $date->format('Y-m-d');  

  $sat_begin = new DateTime('2019-01-21');  
  $sat_end = new DateTime('2019-12-30');   
  $sat_end = $sat_end->modify('+4 day');  
  $sat_interval = new DateInterval('P1D');  
  $sat_daterange = new DatePeriod($sat_begin, $sat_interval, $sat_end); 

  $sun_begin = new DateTime('2019-01-22');  
  $sun_end = new DateTime('2019-12-31');  
  $sun_end = $sun_end->modify('+4 day');  
  $sun_interval = new DateInterval('P1D');  
  $sun_daterange = new DatePeriod($sun_begin, $sun_interval, $sun_end); 


    foreach ($sat_daterange as $sat_date){  
          $interval = $sat_date->diff($date);  
            $saturday = date('w', strtotime($sat_date->format("Y-m-d")));      

         if ($saturday == 6 || $datei == $sat_date) {

             echo  'Happy Weekend, today is '. '<b>  '.$sat_date->format("Y-m-d").' </b>' . '. We have' .$interval->format(' <b> %a days </b> to the Weekend.')."<br><br>";
          } 
    } 

    foreach ($sun_daterange as $sun_date) {  
          $interval = $sun_date->diff($date);  
          $sunday = date('w', strtotime($sun_date->format("Y-m-d")));  

          if ($sunday == 0 || $datei == $sun_date) {

      echo  'Happy Weekend, today is '. '<b>  '.$sun_date->format("Y-m-d").' </b>' . '. We have' .$interval->format(' <b> %a days </b> to the Weekend.')."<br>";
           }
     }

?>

【讨论】:

  • 是的@McBern,感谢您的回复。我可以在一次尝试中打印出所有日期,但是当我尝试打印一个日期时,即今天的日期,我不能。 我只想打印当天的日期,而不是所有日期。也就是说,如果 ( $datei == $sat_date) 或 ( $datei == $sun_date) 我想打印特定匹配的周六/周日日期。为每个匹配的日期打印一个日期
  • 您可以在周六和周日的echo happy weekend 语句之后立即发出break; 命令。
  • 使用 break 语句,我能够打印出两个日期。 if 条件中的两个日期,但我要打印的是一个日期。例如,今天的日期是 26 日星期六。我要打印代码:周末快乐,今天是 2019-01-26。我们距离周末还有 0 天**(仅),但它正在打印:**Happy Weekend,今天是 2019-01-26 。我们距离周末还有 0 天。(在第 1 行)周末快乐,今天是 2019-01-27。我们距离周末还有 0 天。(第 2 行)。我怀疑, $datei 匹配条件中的所有日期。我也在做,先谢谢了。
【解决方案2】:

第二天我得到了这个答案,我在论坛上问了这个问题。答案简短、简洁、准确和有效。我想分享一下,因为它不仅可以帮助解决这个问题,还可以通过调整代码来解决各种问题。感谢astonecipher

<?php
$holidays = [
    "01-01" => "New Years Day",
    "02-14" => "VALENTINE'S DAY, an observed day, but NOT A PUBLIC HOLIDAY",
    "03-08" => "WOMEN'S DAY",
    "12-25" => "Christmas Day",
    ];


$date = new DateTime();
for($index = 0; $index < 356; $index++)
{
    $date->modify('+1 day');
    if(array_key_exists($date->format("m-d"), $holidays))
        echo "Happy {$holidays[$date->format("m-d")]} {$date->format("Y-m-d")}";
    else if($date->format("w") > 0 && $date->format("w") < 6)
        echo "Today is a work day {$date->format("Y-m-d")}";
    else 
        echo "It's the weekend {$date->format("Y-m-d")}";

    echo "\n";
}
?>

【讨论】:

    【解决方案3】:

    欢迎来到 Stackoverflow!

    这是我给你的解决方案:

    $currentdate = getdate();
    if ($currentdate['wday'] == 1) {
    $days = 5;
    } elseif ($currentdate['wday'] == 2) {
    $days = 3;
    } elseif ($currentdate['wday'] == 3) {
    $days = 2;
    } elseif ($currentdate['wday'] == 4) {
    $days = 1;
    } elseif ($currentdate['wday'] == 5) {
    $days = 0;
    } elseif ($currentdate['wday'] == 6) {
    $days = 0;
    } elseif ($currentdate['wday'] == 0) {
    $days = 0;
    }
    
    $date = $currentdate['year'].'-'.$currentdate['mon'].'-'.$currentdate['mday'];
    $weekenddate = date('Y-m-d', strtotime($date. ' + '.$days.' days'));
    
    echo 'Happy Weekend, Today is '.$date.'. We have '.$days.' day(s) to the Weekends';
    

    我刚刚测试过,距离周末还有 1 天 :P
    我猜你玩得开心吗?

    【讨论】:

    • 感谢您的回复。我想打印一周中任何一天与当前日期相比的确切天数,而不是固定天数,例如所有周六和周日,在这里打印 0 天。
    猜你喜欢
    • 1970-01-01
    • 2020-06-26
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    相关资源
    最近更新 更多