календарная дата возвращается -1 день, что не так, альтернативное решение? - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь go вернуться на один день назад в календаре - Что я делаю не так?

Мой подход:

$weekdays = array('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');
///////
function getDates($year) {
  $dates = array();
  date("L", mktime(0, 0, 0, 7, 7, $year)) ? $days = 366 : $days = 365;
  ///
  for($i = 1; $i <= $days; $i++) {
    // get Unix timestamp for a date
    $month = date('F', mktime(0, 0, 0, 1, $i, $year));
    $wk = date('W', mktime(0, 0, 0, 1, $i, $year));
    $wkDay = date('D', mktime(0, 0, 0, 1, $i, $year));
    $day = date('d', mktime(0, 0, 0, 1, $i, $year));
    ///
    $dates[$month][$wk][$wkDay] = $day;
  }
  return $dates;
}
//////
$year = 2020; // from this Year
$dates = getDates($year);
$countW = 1; // for counting weeks
// Output code
echo '<h2><span>Calendar '.$year.'</span></h2>';
foreach($dates as $month => $weeks) {
  echo '<div>';
    echo '<table>';
      echo '<caption>'.$year.' '.$month.'</caption>';
      echo '<tr>';
        echo '<th>W</th>';
        echo '<th>'.implode('</th><th>', $weekdays).'</th>';
      echo '</tr>';
      echo '<tr>';
      foreach ($weeks as $week => $days){
        echo '<tr><td>'.$countW++.'</td>';
        foreach ($weekdays as $day) {
          echo '<td>';
            /* I'm overwhelmed here! */
            echo isset($days[$day]) ? $days[$day] : date('d', strtotime('-1 day')); // outputted is 5
          echo '</td>';
        }
        echo '</tr>';
      }
      echo '</tr>';
    echo '</table>';
}

Я попробовал следующие коды:

  • date('d', strtotime('-1 day')) // outputted: 5 (today is 6)
  • $jd = gregoriantojd(01,06,2020); echo jddayofweek($jd,2); // outputted: Mon (today is Tue)

С этим кодом я получаю день с текущего дня до. Ожидается за день до указанного дня

того, что происходит

what is happening

ожидается

enter image description here

1 Ответ

0 голосов
/ 07 января 2020

С этим кодом я получаю день от текущего днем ​​ранее. Ожидается, что за день до указанного дня

"указанного" здесь дня date('d', strtotime('-1 day')) будет текущий день.

Вообще говоря, (американский) ежемесячный календарь оставит пустое место, если день не в месяце. Например:

enter image description here

Это было бы очень простым решением проблемы. Если нет, вам нужно изменить свое мышление (и код!). В случае первой недели января даты понедельника и вторника - -2 и -1 с первого дня января . Точно так же в последнюю неделю они равны -2 и -1 с первого дня февраля (или +1, +2 с последнего дня января).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...