Why Nepali Calender or Bikram Sambat(BS)?


The answer is simple. Simply, Nepal doesn't follow the English or the AD calender and we had never used it calender. The official Nepali calender is Bikram Sambat. So, it becomes necessary to use our own calender instead of AD.

How to write a code to make a complete working Nepali Calender conversion program?

It's easy to create a AD to BS or BS to AD Nepali/English date converter when you know at least one programming language. The main things is to understand the logic and how it's working.

Let me show you an example to write a simple web application for Nepalese date conversion. I had done this in PHP but it is not necessary for you to do the same.


				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;			
			}
		}
	
	};
			
And here is an example for it's conversion.
	include('nepali_calendar.php');
	$cal = new Nepali_Calendar();
	print_r ($cal->eng_to_nep(2017,05,16));
	print_r($cal->nep_to_eng(2074,9,27));
            

वर्डप्रेस ब्लग को सुरूवात

यो गाइडले बिशेष गरी नयाँ ब्लगर्सका (newbie) लागि आफ्नो ब्लग कसरी सेट-अप गर्न सकिन्छ भन्ने कुरा सिकाउछ।

खोज इन्जिन अनुकूलित (SEO) गर्ने

Search engine optimization or SEO (in Nepal) helps you boost search engine rankings and improve the visibility of your website in Nepal.

Nepali Calender conversion

Learn to write a code to make a complete working Nepali Calender (BS/AD) conversion program.

Accepting : payment accept