Международный фиксированный календарь / календарь Cotsworth - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь создать сайт с календарем, преобразованным из григорианского в IF C. Преобразование достаточно простое, но я не достаточно умел в PHP, чтобы выполнить все расчеты для отображения сегодняшней даты.

Мне удалось напечатать текущий месяц из рабочей переменной $ dayofyear, которая считает дни с 1 января (ручной ввод), а затем отображает текущий месяц через это:

    $now = time(); // or your date as well
    $your_date = strtotime("2020-01-01"); //I'd also love to get this replaced with a string automatically starting from jan 1st of current year so I don't have to update it every year.
    $dayofyear = $now - $your_date;
    $day = round($dayofyear / (60 * 60 * 24));
    $date = round($dayofyear / (7));

    if ($day > 0 && $day < 27) {
        echo 'January';
    }
    elseif ($day > 28 && $day < 55) {
        echo 'February';
    }
    elseif ($day > 56 && $day < 83) {
        echo 'March';
    }
    elseif ($day > 84 && $day < 111) {
        echo 'April';
    }
    elseif ($day > 112 && $day < 139) {
    echo 'May';
    }
    elseif ($day > 140 && $day < 168) {
        echo 'June';
    }
    elseif ($day > 169 && $day < 196) {
        echo 'Sol';
    }
    elseif ($day > 197 && $day < 224) {
        echo 'July';
    }
    elseif ($day > 225 && $day < 252) {
        echo 'August';
    }
    elseif ($day > 253 && $day < 280) {
        echo 'September';
    }
    elseif ($day > 281 && $day < 308) {
        echo 'October';
    }
    elseif ($day > 309 && $day < 336) {
        echo 'November';
    }
    elseif ($day > 337 && $day < 365) {
        echo 'December';
    }

    else {
        echo '<i>error...</i>';
    }

Кроме того, альтернативы этому, чтобы сделать код короче, были бы очень благодарны. Я пытался добиться этого через javascript, но безуспешно ...

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Хорошо, теперь я понимаю проблему. Я думаю, что вы можете использовать оператор модуля и разделить григорианский день года на 28, чтобы получить месяц и день для IF C. Тогда нужно преобразовать это в правильное название месяца.

ifcDate(0);

$time = strtotime('1/29/2020');
ifcDate(date('z', $time));

ifcDate(363);

// Today 
ifcDate(date('z'));

// Other dates
$time = strtotime('2/26/2020');
ifcDate(date('z', $time));

$time = strtotime('06/25/2020');
ifcDate(date('z', $time));

function ifcDate($day) {
  // gregorian day starts at 0
  $ifcMonth = ceil(($day + 1) / 28);
  $ifcDay = ($day % 28) + 1;

  // Month 7 is Sol
  if ($ifcMonth < 7) {
    $dateObj = DateTime::createFromFormat('!m', $ifcMonth);  
    $month = $dateObj->format('F'); 
  } elseif ($ifcMonth == 7) {
    $month = 'Sol';
  } else {
    $dateObj = DateTime::createFromFormat('!m', $ifcMonth - 1);  
    $month = $dateObj->format('F'); 
  }    

  echo "$ifcMonth $ifcDay" . "<br />";
  echo "$month $ifcDay" . "<br />";

}
0 голосов
/ 28 марта 2020

Как уже отмечалось, вы хотите изучить интерфейсы date, strtotime и php DateTime. Для меня неясно, что вы пытаетесь сделать, но вам не нужно создавать большие операторы if / then для работы с датами.

https://www.php.net/manual/en/function.date.php

https://www.php.net/manual/en/function.strtotime.php

https://www.php.net/manual/en/class.datetime

// Current Month
echo date('F') . '<br/>';

// Print January 1st of the current year
echo date('Y-01-01') . '<br/>';

// Current day of year
echo date('z') . '<br/>';

// strtotime is nice to parse any date format
$time = strtotime('now +60 days');
echo date('r', $time) . '<br/>';

// Get date from any day of year, note this starts from 0
$dayOfYear = 255;
$date = DateTime::createFromFormat( 'z' , $dayOfYear);
// Month
echo $date->format('F') . '<br/>';
// Day of the month
echo $date->format('d') . '<br/>';

March
2020-01-01
86
Tue, 26 May 2020 23:22:09 +0000
September
13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...