You are here

function cmfcCalendarV1Julian::fromGregorian in Calendar Systems 7.2

Same name and namespace in other branches
  1. 8 calendar/v1/calendarSystems/julian.class.inc.php \cmfcCalendarV1Julian::fromGregorian()
  2. 8.2 calendar/v1/calendarSystems/julian.class.inc.php \cmfcCalendarV1Julian::fromGregorian()
  3. 7 calendar/v1/calendarSystems/julian.class.inc.php \cmfcCalendarV1Julian::fromGregorian()

Overrides cmfcCalendarV1Plugin::fromGregorian

4 calls to cmfcCalendarV1Julian::fromGregorian()
cmfcCalendarV1Julian::date in calendar/v1/calendarSystems/julian.class.inc.php
Implementation of PHP date function This is the simplified versino by Sina Salek
cmfcCalendarV1Julian::monthStartDay in calendar/v1/calendarSystems/julian.class.inc.php
Find num of Day Begining Of Month ( 0 for Sat & 6 for Sun)
cmfcCalendarV1Julian::monthTotalDays in calendar/v1/calendarSystems/julian.class.inc.php
@author Find Number Of Days In This Month
cmfcCalendarV1Julian::timestampToInfoArray in calendar/v1/calendarSystems/julian.class.inc.php

File

calendar/v1/calendarSystems/julian.class.inc.php, line 383

Class

cmfcCalendarV1Julian

Code

function fromGregorian($g_y, $g_m, $g_d) {
  if ($g_y < 1300 or $g_m < 1 or $g_d < 1) {
    return array(
      '',
      '',
      '',
    );
  }
  $g_days_in_month = array(
    31,
    28,
    31,
    30,
    31,
    30,
    31,
    31,
    30,
    31,
    30,
    31,
  );
  $j_days_in_month = array(
    31,
    31,
    31,
    31,
    31,
    31,
    30,
    30,
    30,
    30,
    30,
    29,
  );
  $gy = $g_y - 1600;
  $gm = $g_m - 1;
  $gd = $g_d - 1;
  $g_day_no = 365 * $gy + div($gy + 3, 4) - div($gy + 99, 100) + div($gy + 399, 400);
  for ($i = 0; $i < $gm; ++$i) {
    $g_day_no += $g_days_in_month[$i];
  }
  if ($gm > 1 && ($gy % 4 == 0 && $gy % 100 != 0 || $gy % 400 == 0)) {

    /* leap and after Feb */
    $g_day_no++;
  }
  $g_day_no += $gd;
  $j_day_no = $g_day_no - 79;
  $j_np = div($j_day_no, 12053);

  /* 12053 = 365*33 + 32/4 */
  $j_day_no = $j_day_no % 12053;
  $jy = 979 + 33 * $j_np + 4 * div($j_day_no, 1461);

  /* 1461 = 365*4 + 4/4 */
  $j_day_no %= 1461;
  if ($j_day_no >= 366) {
    $jy += div($j_day_no - 1, 365);
    $j_day_no = ($j_day_no - 1) % 365;
  }
  for ($i = 0; $i < 11 && $j_day_no >= $j_days_in_month[$i]; ++$i) {
    $j_day_no -= $j_days_in_month[$i];
  }
  $jm = $i + 1;
  $jd = $j_day_no + 1;
  return array(
    $jy,
    $jm,
    $jd,
  );
}