Хобрук: Ваш путь к мастерству в программировании

печатать правильные даты в php

Я помещаю весь код здесь. Я хочу распечатать различную информацию, как показано в моем коде, для каждой другой даты (дня) года. Я пробовал разные функции PHP с первого дня, когда задал свой вопрос, но, похоже, не получил ответа. В любой другой день недели работает нормально, но выходные (суббота или воскресенье) были головной болью. Печать правильной даты в выходные — это вопрос, на который, пожалуйста, должны ответить лучшие программисты. (Например, возьмем выходные на этой неделе и на следующей неделе, у меня должны быть следующие отпечатки: Счастливых выходных, сегодня суббота 2019-02- 09. И на следующий день, который является воскресеньем, я должен распечатать: Счастливых выходных, сегодня воскресенье 2019-02-10. Также на следующей неделе выходные должны дать 2019-02- 16 и 2019-02-17 соответственно в разные дни выходных, но этого не происходит.Я занимаюсь этим почти 1 месяц, прежде чем даже опубликовать свой вопрос здесь 2 недели назад.Помогите брату.

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

  • В PHP-классе DatePeriod нет метода diff(), чтобы получить интервал, вызовите метод getDateInterval(), пожалуйста, проверьте документ здесь: secure.php.net/manual/en/class.dateperiod.php 25.01.2019

Ответы:


1

Вы должны поместить свой код интервала в диапазон для цикла:

<?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>";
           }
     }

?>
25.01.2019
  • Да, @McBern, ваш ответ ценен. Я смог распечатать все даты в одной из моих попыток, но когда я попытался напечатать одну дату, то есть текущую дату, я не смог. Я хочу напечатать только текущую дату, а не все даты. То есть, если ($datei == $sat_date) или ($datei == $sun_date) я хочу напечатать конкретную совпадающую дату субботы/воскресенья. Печать одной даты для каждого совпавшего дня. 25.01.2019
  • Вы можете ввести команду break; сразу после оператора echo happy weekend как в субботу, так и в воскресенье. 25.01.2019
  • с оператором break я смог распечатать две даты. Две даты в условии if, но я хочу напечатать одну дату. Например, сегодняшняя дата — суббота, 26-е. Я хочу, чтобы код печатался: Хороших выходных, сегодня 26 января 2019 года. У нас есть 0 дней до выходных ** (только), но печатается: ** Счастливых выходных, сегодня 2019-01-26 . У нас осталось 0 дней до выходных.(в строке 1) Хороших выходных, сегодня 27-01-2019. У нас осталось 0 дней до выходных.(в строке 2). Я подозреваю, что $datei соответствует всем датам в условии. Я тоже на нем, заранее спасибо. 26.01.2019

  • 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";
    }
    ?>
    
    12.02.2019

    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
    Получайте удовольствие, я думаю?

    24.01.2019
  • ваш ответ ценится. Я хочу напечатать точное количество дней для любого дня недели по сравнению с датой текущего дня, а не фиксированное количество дней, например все субботы и воскресенья, печатая 0 дней здесь. 25.01.2019
  • Новые материалы

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..