Nepali Calendar using php

example.php

<?php

include('nepali_calendar.php');

$cal = new Nepali_Calendar();

print_r ($cal->eng_to_nep(2008,11,23));

print_r($cal->nep_to_eng(2065,8,8));

?>


nepali_calendar.php


 <?php 


class Nepali_Calendar {

private $bs = array(

0=>array(2000,30,32,31,32,31,30,30,30,29,30,29,31),

1=>array(2001,31,31,32,31,31,31,30,29,30,29,30,30),

2=>array(2002,31,31,32,32,31,30,30,29,30,29,30,30),

3=>array(2003,31,32,31,32,31,30,30,30,29,29,30,31),

4=>array(2004,30,32,31,32,31,30,30,30,29,30,29,31),

5=>array(2005,31,31,32,31,31,31,30,29,30,29,30,30),

6=>array(2006,31,31,32,32,31,30,30,29,30,29,30,30),

7=>array(2007,31,32,31,32,31,30,30,30,29,29,30,31),

8=>array(2008,31,31,31,32,31,31,29,30,30,29,29,31),

9=>array(2009,31,31,32,31,31,31,30,29,30,29,30,30),

10=>array(2010,31,31,32,32,31,30,30,29,30,29,30,30),

11=>array(2011,31,32,31,32,31,30,30,30,29,29,30,31),

12=>array(2012,31,31,31,32,31,31,29,30,30,29,30,30),

13=>array(2013,31,31,32,31,31,31,30,29,30,29,30,30),

14=>array(2014,31,31,32,32,31,30,30,29,30,29,30,30),

15=>array(2015,31,32,31,32,31,30,30,30,29,29,30,31),

16=>array(2016,31,31,31,32,31,31,29,30,30,29,30,30),

17=>array(2017,31,31,32,31,31,31,30,29,30,29,30,30),

18=>array(2018,31,32,31,32,31,30,30,29,30,29,30,30),

19=>array(2019,31,32,31,32,31,30,30,30,29,30,29,31),

20=>array(2020,31,31,31,32,31,31,30,29,30,29,30,30),

21=>array(2021,31,31,32,31,31,31,30,29,30,29,30,30),

22=>array(2022,31,32,31,32,31,30,30,30,29,29,30,30),

23=>array(2023,31,32,31,32,31,30,30,30,29,30,29,31),

24=>array(2024,31,31,31,32,31,31,30,29,30,29,30,30),

25=>array(2025,31,31,32,31,31,31,30,29,30,29,30,30),

26=>array(2026,31,32,31,32,31,30,30,30,29,29,30,31),

27=>array(2027,30,32,31,32,31,30,30,30,29,30,29,31),

28=>array(2028,31,31,32,31,31,31,30,29,30,29,30,30),

29=>array(2029,31,31,32,31,32,30,30,29,30,29,30,30),

30=>array(2030,31,32,31,32,31,30,30,30,29,29,30,31),

31=>array(2031,30,32,31,32,31,30,30,30,29,30,29,31),

32=>array(2032,31,31,32,31,31,31,30,29,30,29,30,30),

33=>array(2033,31,31,32,32,31,30,30,29,30,29,30,30),

34=>array(2034,31,32,31,32,31,30,30,30,29,29,30,31), 

35=>array(2035,30,32,31,32,31,31,29,30,30,29,29,31),

36=>array(2036,31,31,32,31,31,31,30,29,30,29,30,30),

37=>array(2037,31,31,32,32,31,30,30,29,30,29,30,30),

38=>array(2038,31,32,31,32,31,30,30,30,29,29,30,31),

39=>array(2039,31,31,31,32,31,31,29,30,30,29,30,30),

40=>array(2040,31,31,32,31,31,31,30,29,30,29,30,30),

41=>array(2041,31,31,32,32,31,30,30,29,30,29,30,30),

42=>array(2042,31,32,31,32,31,30,30,30,29,29,30,31),

43=>array(2043,31,31,31,32,31,31,29,30,30,29,30,30),

44=>array(2044,31,31,32,31,31,31,30,29,30,29,30,30),

45=>array(2045,31,32,31,32,31,30,30,29,30,29,30,30),

46=>array(2046,31,32,31,32,31,30,30,30,29,29,30,31),

47=>array(2047,31,31,31,32,31,31,30,29,30,29,30,30),

48=>array(2048,31,31,32,31,31,31,30,29,30,29,30,30),

49=>array(2049,31,32,31,32,31,30,30,30,29,29,30,30),

50=>array(2050,31,32,31,32,31,30,30,30,29,30,29,31),

51=>array(2051,31,31,31,32,31,31,30,29,30,29,30,30),

52=>array(2052,31,31,32,31,31,31,30,29,30,29,30,30),

53=>array(2053,31,32,31,32,31,30,30,30,29,29,30,30),

54=>array(2054,31,32,31,32,31,30,30,30,29,30,29,31),

55=>array(2055,31,31,32,31,31,31,30,29,30,29,30,30),

56=>array(2056,31,31,32,31,32,30,30,29,30,29,30,30),

57=>array(2057,31,32,31,32,31,30,30,30,29,29,30,31),

58=>array(2058,30,32,31,32,31,30,30,30,29,30,29,31),

59=>array(2059,31,31,32,31,31,31,30,29,30,29,30,30),

60=>array(2060,31,31,32,32,31,30,30,29,30,29,30,30),

61=>array(2061,31,32,31,32,31,30,30,30,29,29,30,31),

    62=>array(2062,30,32,31,32,31,31,29,30,29,30,29,31),

63=>array(2063,31,31,32,31,31,31,30,29,30,29,30,30),

64=>array(2064,31,31,32,32,31,30,30,29,30,29,30,30),

65=>array(2065,31,32,31,32,31,30,30,30,29,29,30,31),

66=>array(2066,31,31,31,32,31,31,29,30,30,29,29,31),

67=>array(2067,31,31,32,31,31,31,30,29,30,29,30,30),

68=>array(2068,31,31,32,32,31,30,30,29,30,29,30,30),

69=>array(2069,31,32,31,32,31,30,30,30,29,29,30,31),

70=>array(2070,31,31,31,32,31,31,29,30,30,29,30,30),

71=>array(2071,31,31,32,31,31,31,30,29,30,29,30,30),

72=>array(2072,31,32,31,32,31,30,30,29,30,29,30,30),

73=>array(2073,31,32,31,32,31,30,30,30,29,29,30,31),

74=>array(2074,31,31,31,32,31,31,30,29,30,29,30,30),

75=>array(2075,31,31,32,31,31,31,30,29,30,29,30,30),

76=>array(2076,31,32,31,32,31,30,30,30,29,29,30,30),

77=>array(2077,31,32,31,32,31,30,30,30,29,30,29,31),

78=>array(2078,31,31,31,32,31,31,30,29,30,29,30,30),

79=>array(2079,31,31,32,31,31,31,30,29,30,29,30,30),

80=>array(2080,31,32,31,32,31,30,30,30,29,29,30,30),

81=>array(2081, 31, 31, 32, 32, 31, 30, 30, 30, 29, 30, 30, 30),

82=>array(2082, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30),

83=>array(2083, 31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30),

84=>array(2084, 31, 31, 32, 31, 31, 30, 30, 30, 29, 30, 30, 30),

85=>array(2085, 31, 32, 31, 32, 30, 31, 30, 30, 29, 30, 30, 30),

86=>array(2086, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30),

87=>array(2087, 31, 31, 32, 31, 31, 31, 30, 30, 29, 30, 30, 30),

88=>array(2088, 30, 31, 32, 32, 30, 31, 30, 30, 29, 30, 30, 30),

89=>array(2089, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30),

90=>array(2090, 30, 32, 31, 32, 31, 30, 30, 30, 29, 30, 30, 30)

);

private $nep_date = array('year'=>'', 'month'=>'', 'date'=>'', 'day'=>'','nmonth'=>'','num_day'=>'');

private $eng_date = array('year'=>'', 'month'=>'', 'date'=>'', 'day'=>'','emonth'=>'','num_day'=>'');

public $debug_info = "";

/**

* Calculates wheather english year is leap year or not

*

* @param integer $year

* @return boolean

*/

public function is_leap_year($year)

{

$a = $year;

if ($a%100==0)

{

if($a%400==0)

{

return true;

} else {

return false;

}

} else { 

if ($a%4==0)

{

return true;

} else {

return false;

}

}

}

private function get_nepali_month($m){

$n_month = false;

switch($m){

case 1:

$n_month = "Baishak";

break;

case 2:

$n_month = "Jestha";

break;

case 3:

$n_month = "Ashad";

break;

case 4:

$n_month = "Shrawn";

break;

case 5:

$n_month = "Bhadra";

break;

case 6:

$n_month = "Ashwin";

break;

case 7:

$n_month = "kartik";

break;

case 8:

$n_month = "Mangshir";

break;

case 9:

$n_month = "Poush";

break;

case 10:

$n_month = "Magh";

break;

case 11:

$n_month = "Falgun";

break;

case 12:

$n_month = "Chaitra";

break;

}

return  $n_month;

}

private function get_english_month($m){

$eMonth = false;

switch($m){

case 1:

$eMonth = "January";

break;

case 2:

$eMonth = "February";

break;

case 3:

$eMonth = "March";

break;

case 4:

$eMonth = "April";

break;

case 5:

$eMonth = "May";

break;

case 6:

$eMonth = "June";

break;

case 7:

$eMonth = "July";

break;

case 8:

$eMonth = "August";

break;

case 9:

$eMonth = "September";

break;

case 10:

$eMonth = "October";

break;

case 11:

$eMonth = "November";

break;

case 12:

$eMonth = "December";

}

return $eMonth;

}

private function get_day_of_week($day){

switch($day){

case 1:

$day = "Sunday";

break;

case 2:

$day = "Monday";

break;

case 3:

$day = "Tuesday";

break;

case 4:

$day = "Wednesday";

break;

case 5:

$day = "Thursday";

break;

case 6:

$day = "Friday";

break;

case 7:

$day = "Saturday";

break;

}

return $day;

}

private function is_range_eng($yy, $mm, $dd){

if($yy<1944 || $yy>2033){

$this->debug_info = "Supported only between 1944-2022";

return false;

}

if($mm<1 || $mm >12){

$this->debug_info = "Error! value 1-12 only";

return false;

}

if($dd<1 || $dd >31){

$this->debug_info = "Error! value 1-31 only";

return false;

}

return true;

}

private function is_range_nep($yy, $mm, $dd){

if($yy<2000 || $yy>2089){

$this->debug_info="Supported only between 2000-2089";

return false;

}

if($mm<1 || $mm >12) {

$this->debug_info="Error! value 1-12 only";

return false;

}

if($dd<1 || $dd >32){

$this->debug_info="Error! value 1-31 only";

return false;

}

return true;

}

/**

* currently can only calculate the date between AD 1944-2033...

*

* @param unknown_type $yy

* @param unknown_type $mm

* @param unknown_type $dd

* @return unknown

*/

public function eng_to_nep($yy,$mm,$dd){

if ($this->is_range_eng($yy, $mm, $dd) == false){

return false;

} else {

// english month data.

$month = array(31,28,31,30,31,30,31,31,30,31,30,31);

$lmonth = array(31,29,31,30,31,30,31,31,30,31,30,31);

$def_eyy = 1944; //spear head english date...

$def_nyy = 2000; $def_nmm = 9; $def_ndd = 17-1; //spear head nepali date...

$total_eDays=0; $total_nDays=0; $a=0; $day=7-1; //all the initializations...

$m = 0; $y = 0; $i =0; $j = 0;

$numDay=0;

// count total no. of days in-terms of year

for($i=0; $i<($yy-$def_eyy); $i++){ //total days for month calculation...(english)

if($this->is_leap_year($def_eyy+$i)==1)

for($j=0; $j<12; $j++)

$total_eDays += $lmonth[$j];

else

for($j=0; $j<12; $j++)

$total_eDays += $month[$j];

}

// count total no. of days in-terms of month

for($i=0; $i<($mm-1); $i++){

if($this->is_leap_year($yy)==1)

$total_eDays += $lmonth[$i];

else

$total_eDays += $month[$i];

}

// count total no. of days in-terms of date

$total_eDays += $dd;

$i = 0; $j = $def_nmm;

$total_nDays = $def_ndd;

$m = $def_nmm;

$y = $def_nyy;

// count nepali date from array

while($total_eDays != 0) {

        $a = $this->bs[$i][$j];

$total_nDays++; //count the days

$day++; //count the days interms of 7 days

if($total_nDays > $a){

$m++;

$total_nDays=1;

$j++;

}

if($day > 7)

$day = 1;

if($m > 12){

$y++;

$m = 1;

}

    if($j > 12){

$j = 1; $i++;

}

$total_eDays--;

}

$numDay=$day;

$this->nep_date["year"] = $y;

$this->nep_date["month"] = $m;

$this->nep_date["date"] = $total_nDays;

$this->nep_date["day"] = $this->get_day_of_week($day);

$this->nep_date["nmonth"] = $this->get_nepali_month($m);

$this->nep_date["num_day"] = $numDay;

return $this->nep_date;

}

}

/**

* currently can only calculate the date between BS 2000-2089

*

* @param unknown_type $yy

* @param unknown_type $mm

* @param unknown_type $dd

* @return unknown

*/

public function nep_to_eng($yy,$mm,$dd){

$def_eyy = 1943 ; $def_emm=4 ; $def_edd=14-1; // init english date.

$def_nyy = 2000; $def_nmm = 1; $def_ndd = 1; // equivalent nepali date.

$total_eDays=0; $total_nDays=0; $a=0; $day=4-1; // initializations...

$m = 0; $y = 0; $i=0;

$k = 0; $numDay = 0;

$month = array(0,31,28,31,30,31,30,31,31,30,31,30,31);

  $lmonth = array(0,31,29,31,30,31,30,31,31,30,31,30,31);

if($this->is_range_nep($yy, $mm, $dd)===false){

return false;

} else {

// count total days in-terms of year

for($i=0; $i<($yy-$def_nyy); $i++){

for($j=1; $j<=12; $j++){

$total_nDays += $this->bs[$k][$j];

}

$k++;

}

// count total days in-terms of month

for($j=1; $j<$mm; $j++){

$total_nDays += $this->bs[$k][$j];

}

// count total days in-terms of dat

$total_nDays += $dd;

//calculation of equivalent english date...

$total_eDays = $def_edd;

$m = $def_emm;

$y = $def_eyy;

while($total_nDays != 0){

if($this->is_leap_year($y))

{

$a = $lmonth[$m];

}

else

{

$a = $month[$m];

}

$total_eDays++;

$day++;

if($total_eDays > $a){

$m++;

$total_eDays = 1;

if($m > 12){

$y++;

$m = 1;

}

}

if($day > 7)

$day = 1;

$total_nDays--;

}

$numDay = $day;

$this->eng_date["year"] = $y;

$this->eng_date["month"] = $m;

$this->eng_date["date"] = $total_eDays;

$this->eng_date["day"] = $this->get_day_of_week($day);

$this->eng_date["emonth"] = $this->get_english_month($m); 

$this->eng_date["num_day"] = $numDay;

return $this->eng_date;

}

}

};

Comments

Popular posts from this blog

http://sajanmaharjan.com.np/my-works/nepali-functions-addin-for-excel/

Algorithm for Nepali date conversion