تبدیل تاریخ شمسی به میلادی و برعکس - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تبدیل تاریخ شمسی به میلادی و برعکس

0 امتیاز

سلام

میشه بگید که چطور میشه تاریخ شمسی رو در textbox دریافت کرد و در بانک به صورت میلادی ذخیره کرد,

یا بر عکسش چطور تاریخ میلادی که درج کردم رو از بانک بخونم و توی تکست به صورت شمسی نمایش بدم؟

لطفا با کد یک مثال برام بزنید که چطور از توابع استفاده کنم sad

من تقویم این سایت رو استفاده کردم

http://amib.ir/weblog/?page_id=316

 

ممنون

سوال شده بهمن 17, 1392  بوسیله ی Mahdi.Victory (امتیاز 24)   2 3 4
دوباره تگ گذاری شد فروردین 14, 1393 بوسیله ی BlueBlade

2 پاسخ

+1 امتیاز
 
بهترین پاسخ

 

$pd = new persiandate();
$pdate = '1392/11/19'; // $_GET ya $_POST daryaftesh konid
$arr = explode('/', $pdate);
$array = $pd->mds_to_gregorian($arr[0], $arr[1], $arr[2]);
print_r($array);

 

خب ببينيد DatePicker به شما اين رشته رو ميده: 1392/11/19 تا اينجا که مشکلي نداريد؟(دريافتش با $_GET و $_POST هست). حالا به مثال بالا نگاه کنيد

$pdate  رو باید از ورودی بگیرید که باید کار با فرم ها رو بلد باشید(اگر نیستید مطلب زیاده سرچ کنید)

در آخر $array رو به شما میده که یک ارایه با سه المنت هستش که اولی (اندیس 0) سال، دومی ماه و سومی روز هست.(محتوای آرایه رو نگاه کنید کاملا مشخصه)

و برای تبدیل تاریخ میلادی به شمسی:

$pd = new persiandate();
$date = '2014/02/07'; // select az dataBase
$arr = explode('/', $date);
$array = $pd->gregorian_to_mds($arr[0], $arr[1], $arr[2]);
print_r($array);

توی این مورد هم تاریخی که از دیتابیس میخونید رو اینجا قرار میدید و باز هم یک آرایه به همون صورتی که توی مورد بالا گفتم میده بهتون البته اینبار تاریخ شمسی

پاسخ داده شده بهمن 18, 1392 بوسیله ی dousti91 (امتیاز 405)   1 2 9
انتخاب شد بهمن 21, 1392 بوسیله ی Mahdi.Victory
+3 امتیاز

به اسکریپت هایی از قبیل همین که لینکش رو گذاشتید DatePicker میگن که فقط مربوط به بخش view سایت شما میشن.

شما برای اینکه تاریخ رو از کاربر بگیرید میتونید تکست باکس خالی هم بذارید و تاریخ رو مجبوره تو فرمتی که میخواید وارد کنه و اسکریپت های DatePicker میان این کار رو برای کاربر راحت تر میکنن. پس این اسکریپت ربطی به ذخیره توی دیتابیس و تبدیل تاریخ و... نداره و برای اینکار باید از اسکریپت php دیگری استفاده کنید(و یا اسکریپت خودتون رو بنویسید).

من خودم از این اسکریپت استفاده میکنم:

<?php

/*
Created by : Jalali
modified by : Mohammad Dayyan
1387/5/15
*/
class persiandate
{

	function monthname($month)
	{

		if($month=="01") return "&#1601;&#1585;&#1608;&#1585;&#1583;&#1610;&#1606;";

		if($month=="02") return "&#1575;&#1585;&#1583;&#1610;&#1576;&#1607;&#1588;&#1578;";

		if($month=="03") return "&#1582;&#1585;&#1583;&#1575;&#1583;";

		if($month=="04") return  "&#1578;&#1610;&#1585;";

		if($month=="05") return "&#1605;&#1585;&#1583;&#1575;&#1583;";

		if($month=="06") return "&#1588;&#1607;&#1585;&#1610;&#1608;&#1585;";

		if($month=="07") return "&#1605;&#1607;&#1585;";

		if($month=="08") return "&#1570;&#1576;&#1575;&#1606;";

		if($month=="09") return "&#1570;&#1584;&#1585;";

		if($month=="10") return "&#1583;&#1610;";

		if($month=="11") return "&#1576;&#1607;&#1605;&#1606;";

		if($month=="12") return "&#1575;&#1587;&#1601;&#1606;&#1583;";
	}
	function div($a,$b) 
	{
		return (int) ($a / $b);
	}

	function gregorian_to_mds ($g_y, $g_m, $g_d)
	{
		$g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		$m_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+$this->div($gy+3,4)-$this->div($gy+99,100)+$this->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;

	   $m_day_no = $g_day_no-79;

	   $j_np = $this->div($m_day_no, 12053); /* 12053 = 365*33 + 32/4 */
	   $m_day_no = $m_day_no % 12053;

	   $jy = 979+33*$j_np+4*$this->div($m_day_no,1461); /* 1461 = 365*4 + 4/4 */

	   $m_day_no %= 1461;

	   if ($m_day_no >= 366) {
		  $jy += $this->div($m_day_no-1, 365);
		  $m_day_no = ($m_day_no-1)%365;
	   }

	   for ($i = 0; $i < 11 && $m_day_no >= $m_days_in_month[$i]; ++$i)
		  $m_day_no -= $m_days_in_month[$i];
	   $jm = $i+1;
	   $jd = $m_day_no+1;

	   return array($jy, $jm, $jd);
	}

	function mds_to_gregorian($m_y, $j_m, $m_d)
	{
		$g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		$m_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);



	   $jy = $m_y-979;
	   $jm = $j_m-1;
	   $jd = $m_d-1;

	   $m_day_no = 365*$jy + $this->div($jy, 33)*8 + $this->div($jy%33+3, 4);
	   for ($i=0; $i < $jm; ++$i)
		  $m_day_no += $m_days_in_month[$i];

	   $m_day_no += $jd;

	   $g_day_no = $m_day_no+79;

	   $gy = 1600 + 400*$this->div($g_day_no, 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
	   $g_day_no = $g_day_no % 146097;

	   $leap = true;
	   if ($g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
	   {
		  $g_day_no--;
		  $gy += 100*$this->div($g_day_no,  36524); /* 36524 = 365*100 + 100/4 - 100/100 */
		  $g_day_no = $g_day_no % 36524;

		  if ($g_day_no >= 365)
			 $g_day_no++;
		  else
			 $leap = false;
	   }

	   $gy += 4*$this->div($g_day_no, 1461); /* 1461 = 365*4 + 4/4 */
	   $g_day_no %= 1461;

	   if ($g_day_no >= 366) {
		  $leap = false;

		  $g_day_no--;
		  $gy += $this->div($g_day_no, 365);
		  $g_day_no = $g_day_no % 365;
	   }

	   for ($i = 0; $g_day_no >= $g_days_in_month[$i] + ($i == 1 && $leap); $i++)
		  $g_day_no -= $g_days_in_month[$i] + ($i == 1 && $leap);
	   $gm = $i+1;
	   $gd = $g_day_no+1;

	   return array($gy, $gm, $gd);
	}
}
?>

این هم مثالی از استفاده از این کلاس:

$pd = new persiandate();
$array = $pd->mds_to_gregorian('1392', '11', '18');
print_r($array);
echo "<hr />";
$array = $pd->gregorian_to_mds('2014', '2', '6');
print_r($array);

ذخیره توی دیتابیس و سلکت هم که دیگه توضیح نمیخواد.

پاسخ داده شده بهمن 17, 1392 بوسیله ی dousti91 (امتیاز 405)   1 2 9
سلام
ممنون که با این سرعت جواب میدین
اینکه گفتیت این اسکریپت ربطی به ذخیره توی دیتابیس و تبدیل تاریخ و... نداره رو میدونم
میشه شما بگید من چطور تاریخی که به وسیله این اسکریپت  داخل textbox قرار میدم رو با این تابع تبدیل کنم
یا وقتی از بانک تاریخ میلادی رو میخونم چطوری تبدیلش کنم به شمسی و توی textbox قرار بدم(برای فرم ویرایش)

ممنون
...