PHP: Kalend��ov� funkce - Manual
PHP  
downloads | documentation | faq | getting help | mailing lists | | php.net sites | links | my php.net 
search for in the  
<bzwritecal_days_in_month>
view the version of this page
Last updated: Thu, 15 Jul 2004

VI. Kalend��ov� funkce

�vod

Toto roz���en� p�edstavuje sadu funkc� ur�en�ch ke zjednodu�en� p�evod� mezi r�zn�mi kalend��i. Prost�edn�kem nebo standardem, na kter�m je zalo�ena, je Julian Day Count. To je po�et dn� za��naj�c� daleko p�ed jak�mkoli datem o kter� by se v�t�ina lid� zaj�mala (n�kde kolem 4000 p�. n. l.). Pokud chcete p�ev�d�t mezi kalend��ov�mi syst�my, mus�te nejd��v p�ev�st na Julian Day Count, potom na k��en� kalend��. Julian Day Count se velmi li�� od Juli�nsk�ho kaled��e! Pro v�ce informac� o Julian Day Count viz . Pro v�ce informac� o kalend��ov�ch syst�mech viz . Tyto instrukce obsahuj� v��atky z t�to str�nky (v uvozovk�ch).

Instalace

Pro pr�ci tohoto roz���en� mus�te PHP zkompilovat s volbou --enable-calendar.

Verze PHP pro Windows m� vestav�nou podporu pro toto roz���en�. K pou�it� t�chto funkc� nen� t�eba na��tat ��dn� dal�� roz���en�.

Konfigurace b�hu

Toto roz���en� nem� definov�no ��dn� konfigura�n� direktivy.

Typy prost�edk�

Toto roz���en� nem� definov�n ��dn� typ prost�edku (resource).

P�eddefinovan� konstanty

Tyto konstanty jsou definov�ny t�mto roz���en�m a budou k dispozici pouze tehdy, bylo-li roz���en� zkompilov�no spole�n� s PHP nebo dynamicky zavedeno za b�hu.

CAL_GREGORIAN (integer)

CAL_JULIAN (integer)

CAL_JEWISH (integer)

CAL_FRENCH (integer)

CAL_NUM_CALS (integer)

CAL_DOW_DAYNO (integer)

CAL_DOW_SHORT (integer)

CAL_DOW_LONG (integer)

CAL_MONTH_GREGORIAN_SHORT (integer)

CAL_MONTH_GREGORIAN_LONG (integer)

CAL_MONTH_JULIAN_SHORT (integer)

CAL_MONTH_JULIAN_LONG (integer)

CAL_MONTH_JEWISH (integer)

CAL_MONTH_FRENCH (integer)

The following constants are available since PHP 4.3.0 :

CAL_EASTER_DEFAULT (integer)

CAL_EASTER_ROMAN (integer)

CAL_EASTER_ALWAYS_GREGORIAN (integer)

CAL_EASTER_ALWAYS_JULIAN (integer)

The following constants are available since PHP 5.0.0 :

CAL_JEWISH_ADD_ALAFIM_GERESH (integer)

CAL_JEWISH_ADD_ALAFIM (integer)

CAL_JEWISH_ADD_GERESHAYIM (integer)

Obsah
cal_days_in_month -- Return the number of days in a month for a given year and calendar
cal_from_jd -- Converts from Julian Day Count to a supported calendar
cal_info -- Returns information about a particular calendar
cal_to_jd -- Converts from a supported calendar to Julian Day Count
easter_date -- Zjistit UNIXov� timestamp Velikono�n� p�lnoci v dan�m roce
easter_days --  Get number of days after March 21 on which Easter falls for a given year
FrenchToJD --  P�ev�st datum z Francouzsk�ho republik�nsk�ho kalend��e na Julian Day Count
GregorianToJD -- P�ev�st Gregori�nsk� datum na Julian Day Count
JDDayOfWeek -- Vr�tit den v t�dnu
JDMonthName -- Vr�tit n�zev m�s�ce
JDToFrench --  P�ev�st Julian Day Count na Francouzsk� republik�nsk� kalend��
JDToGregorian -- P�ev�st Julian Day Count na Gregori�nsk� datum
JDToJewish --  P�ev�st Julian Day Count na idovsk� kalend��
JDToJulian --  P�ev�st Julian Day Count na Juli�nsk� datum
jdtounix -- P�ev�st Julian Day Count na UNIXov� timestamp
JewishToJD --  P�ev�st datum podle idovsk�ho kalend��e na Julian Day Count
JulianToJD --  P�ev�st Juli�nsk� datum na Julian Day Count
unixtojd -- P�ev�st UNIXov� timestamp na Julian Day Count


add a note add a note User Contributed Notes
Kalend��ov� funkce
wasiq911 at hotmail dot com
23-Jun-2004 08:55
sup people!! I made this dynamic calendar for my site and thought I would share it with everybody. It's completely automatic so there's no need to modify anything...except maybe add your own styles of course!

Hope this code helps somebody:

<html>
<body>
  <?php
  
// Get the calender info
  
$t_days = cal_days_in_month(CAL_GREGORIAN, date("m"), date("Y"));
  
$day = date("w", mktime(0, 0, 0, date("m"), 1, date("Y")));
 
?>

  <table border = "1">
   <tr><th bgcolor = "yellow" colspan = "7"><?php echo date("F Y"); ?></th></tr>
   <tr><th>Sun</th><th>Mon</th><th>Tue</th>
       <th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>

   <?php
  
for ($i = 0; $i <= $t_days; $i++)
   {
     if (
$day > 6) {
       echo
"</tr>\n<tr>\n";
      
$day = 0; }
    
//------------------------------------------------//
    
if ($i == date("j")) {?>
        <td align = "center"><b><?php echo $i; $day++; echo "</b></td>\n"; }
     else if (
$i > 0) {?>
        <td align = "center"><?php echo $i; $day++; echo "</td>\n"; }
     else if (
$day > 0) {?>
        <tr><td colspan = "<?php echo $day; ?>"><?php echo "</td>\n"; }
    
//-----------------------------------------------//
    
if ($i == $t_days && $day < 6) {?>
        <td colspan = "<?php echo 7 - $day; ?>"><?php echo "</td>\n</tr>\n"; }
   }
?>
  </table>
</body>
</html>

The above code creates a small and simple calendar table which highlights the current day in bold. I also took the time to make the source code well formatted.
pouya
03-Apr-2004 06:39
There is an implementation of the Persian calendar at www.farsiweb.info.
amichauer at NOSPAM dot gmx dot de
06-Dec-2003 01:07
Where is CAL_HIJRI?

# Julian Day Count To Hijri
function JDToHijri($jd)
{
   $jd = $jd - 1948440 + 10632;
   $n  = (int)(($jd - 1) / 10631);
   $jd = $jd - 10631 * $n + 354;
   $j  = ((int)((10985 - $jd) / 5316)) *
         ((int)(50 * $jd / 17719)) +
         ((int)($jd / 5670)) *
         ((int)(43 * $jd / 15238));
   $jd = $jd - ((int)((30 - $j) / 15)) *
         ((int)((17719 * $j) / 50)) -
         ((int)($j / 16)) *
         ((int)((15238 * $j) / 43)) + 29;
   $m  = (int)(24 * $jd / 709);
   $d  = $jd - (int)(709 * $m / 24);
   $y  = 30*$n + $j - 30;

   return array($d, $m, $y);
}

# Hijri To Julian Day Count
function HijriToJD($d, $m, $y)
{
   return (int)((11 * $y + 3) / 30) +
           354 * $y + 30 * $m -
           (int)(($m - 1) / 2) + $d + 1948440 - 385;
}
jthome at fcgov dot com
02-Oct-2003 06:38
Had a similar problem as curlee, except I needed to create a JDE_ERP date.  [format is CYYDDD]

<?php

function jde_date_create($month, $day, $year){
  
/*
   *  NOTE: $month and $day CANNOT have leading zeroes,
   *        $year must be'YYYY' format
   */
  
$jde_year_prefix = substr($year, 0, 1) - 1;
  
$jde_year_suffix = substr($year, -2);
  
  
//note that valid years for mktime are 1902-2037
  
$timestamp = mktime(0,0,0,$month, $day, $year);
  
$baseline_timestamp = mktime(0,0,0,1,0,$year);
  
  
$day_count = round(($timestamp - $baseline_timestamp)/86400);
  
$day_count_padded = str_pad($day_count,3,"0",STR_PAD_LEFT);

   return (
$jde_year_prefix . $jde_year_suffix . $day_count_padded);
  
}

echo
jde_date_create(6,25,2000);// will return '103176'

?>

--
Jim
curlee at mindspring dot com
29-Aug-2003 03:55
I solved a problem with Julian dates that are used in the JD Edwards ERP package (running on AS/400).  The Julian format for this system is as follows:  CYYDDD

Where C is 0 for 1900 and 1 for 2000
DDD is the day of the year count

I used the mktime built-in php function to convert dates to the normal DD/MM/YYYY format.  This function will convert dates that are between 1970 and 2038 (limitation of unix timestamps and the mktime function)

The $jde_date var needs to be a 6 len STRING.... if you use a numeric var type it will drop the leading 0 for any date that represents 1900.... this will botch the substr functions and thus make the whole thing wrong. 

function jde_date_conv($jde_date)
{

$ct = substr($jde_date,0,1);
$yr = substr($jde_date,1,2);
$dy = substr($jde_date,3,3);

if($ct == 0) $yr_pfx = 19;
if($ct == 1) $yr_pfx = 20;

$tlt_yr = $yr_pfx.$yr;

$base_time = mktime(0,0,0,1,0,$tlt_yr);

$unix_time = ($dy * 86400) + $base_time;

return date("m/d/Y" , $unix_time);
}
carlj at vibez dot ca
17-Jun-2003 07:28
Why not do something like this, to find the number of days in a month?

$monthNum = date("n"); // or any value from 1-12
$year        = date("Y"); // or any value >= 1
$numDays  = date("t",mktime(0,0,0,$monthNum,1,$year))

This will tell you if there is 28-31 days in a month
dy64 at dy64 dot de
12-Nov-2002 02:18
Best performance:
/*
 * Find the number of days in a month
 * Year is between 1 and 32767 inclusive
 * Month is between 1 and 12 inclusive
 */
function DayInMonth($month, $year) {
   var $daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
   if ($month != 2) return $daysInMonth[$month - 1];
   return (checkdate($month, 29, $year)) ? 29 : 28;
}
gaoweibin at 163 dot net
26-Aug-2002 09:26
This is a Chinese Lunar Calendar, including SolarTerm, TianGan, DiZhi, DiesFaustus and Holidays.

kmcm at bigfoot dot com
21-Jan-2002 02:42
if, like me, you don't have a PHP build that includes the cal functions, you may want to use this function for sorting out leap year.

function days_in_feb($year){

   //$year must be YYYY
   //[gregorian] leap year math :
  
   if ($year < 0) $year++;
   $year += 4800;

   if ( ($year % 4) == 0) {
       if (($year % 100) == 0) {
           if (($year % 400) == 0) {
               return(29);
           } else {
               return(28);
           }
       } else {
           return(29);
       }
   } else {
       return(28);
   }
}

of course the next leap year isn't until the end of the century but this makes for timeless code I guess ...or if you are using 2000 in your dates or are going far back in time, etc, it is necessary.
mikebabcock at pobox dot com
17-Jul-2000 04:20
There are two world calculations for the date of Easter.  The Easter date function should account for this; one used (generally) by the Western world and one (generally) used by the Eastern (the official date used by the East Orthodox Church).
ssharma at odc dot net
31-Jan-2000 11:36
If you're interested in dates/calendars, check out the MCAL stuff.

<bzwritecal_days_in_month>
 Last updated: Thu, 15 Jul 2004
show source | credits | sitemap | contact | advertising | mirror sites 
Copyright © 2001-2004 The PHP Group
All rights reserved.
This unofficial mirror is operated at: /
Last updated: Sun Nov 14 23:09:54 2004 Local time zone must be set--see zic manual page