首页 > 解决方案 > 国际固定日历/科茨沃斯日历

问题描述

我正在尝试建立一个将日历从公历转换为 IFC 的网站。转换很简单,但我在 PHP 中不够精通,无法进行所有计算以显示今天的日期。

我设法从工作变量 $dayofyear 打印当前月份,该变量计算自 1 月 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来实现这一点,但没有成功......

标签: phpdatecalendar

解决方案


好的,现在我明白了这个问题。我认为您可以使用模数运算符并将一年中的公历除以 28 以获得 IFC 的月份和日期。然后将其转换为正确的月份名称。

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 />";

}

推荐阅读