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

3dsmax

Member
سلام من در موتور های جستجو در مورد تبدیل تاریخ میلادی به شمسی جستجو کردم ولی اون چیزی که می خواستم پیدا نکردم .
حالا از دوستان می خوام ببینم چطور می شه تاریخ میلادی رو به شمسی تبدیل کرد و می خوام که روز , هفته , ماه , سال رو نمایش بده از دوستان می خوام اگه می تونم کمک کنن ممنون می شوم.:wink::)
 

Zanguei

Member
سلام
در سایت iranphp میتونید یکیشو پیدا کنید که از تابعی به نام jdate برای تبدیل تاریخ میلادی به جلالی استفاده می کنه. بسیار تابع قدرتمندی است و مشابه date خود php عمل می کنه.
موفق باشید.
 

3dsmax

Member
سلام مچکرم از دوستان هیچ هواسم به search مجید آنلاین نبود یه search کردم به نتیجه رسیدم . یه کمکی هم تو کد دست بردم تا بهتر بشه . حالا گذاشتم اگه دوستان می خوان استفاده کنن.

اینو تو فایلی به نام function.php بزارید.

PHP:
<?php
function div($a,$b) {
    return (int) ($a / $b);
}
function gregorian_to_jalali ($g_y, $g_m, $g_d) 
{
    $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); 
}
function week($mysql) {
$date = date(w,$mysql);
	if ($date == '0') {
		return  "یکشنبه";
	}
	elseif ($date == '1') {
		return "دوشنبه";
	}
	elseif ($date == '2') {
		return "سه شنبه";
	}
	elseif ($date == '3') {
		return "چهارشنبه";
	}
	elseif ($date == '4') {
		return "پنجشنبه";
	}
	elseif ($date == '5') {
		return "جمعه";
	}
	else {
		return "شنبه";
	}
}
function jdate($mysql) {
	$TDy=date("Y",$mysql);
	$TDm=date("m",$mysql);
	$TDd=date("d",$mysql);
	$gdate=$TDy."-".$TDm."-".$TDd;
	
	list( $gyear, $gmonth, $gday ) = preg_split ( '/-/', $gdate );
	list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($gyear, $gmonth, $gday);
	$jdate = $jyear."/".$jmonth."/".$jday;
	return $jdate;
}
function day($mysql) {
$day = date(a,$mysql);
	if ($day == 'am') {
		echo "قبل از ظهر";
	}
	else {
		echo "بعد از ظهر";
	}
}
function db_connect()
{
   $result = mysql_connect("localhost","user","pass"); 
   if (!$result)
      return false;
   if (!mysql_select_db('نام بانک اطلاعاتی'))
      return false;
   return $result;
}
?>


این رو هم هر اسمی گذاشتید اشکال نداره

PHP:
<?php
include('function.php');

//////////////mysql///////////////////////////////////////////////

$conn = db_connect();
if (!$conn) {
	echo "error";
}
$query = "select * from نام جدول در بانک اطلاعاتی";
$result = mysql_query($query);
if (!$result) {
	echo "error";
}
$num = mysql_num_rows($result);
for($i = 0; $i < $num; $i ++) {
$row = mysql_fetch_array($result);
$mysql = $row[فیلد مورد نظردر بانک اطلاعاتی];

//////////////veiw///////////////////////////////////////////////////

echo jdate($mysql);
echo "<br />";
echo date("h:i:s", $mysql);
echo "<br />";
echo day($mysql);
echo "<br />";
echo week($mysql);
echo "<br /><br />";
}
?>

یه مشکل من تو این کد دیدم و اینکه تو سال 1387 رو اگه بش توجه کنید آخرین ماهش (اسفند) به جای 29 روز 30 روز و این کد تا 29 مینداره ماه آخرو حالا خودتون می دونید فلن بایی:D:)
 
آخرین ویرایش:

Zanguei

Member
سلام دوست عزیز
تابعی که من معرفی کردم از کدی که جناب 3dmax معرفی کردند کامل تر هست اما با اونی که شما لینکش رو گذاشتید فرقی نمی کنه و هر دو یکی هستن و نویسنده هاشون هم یکی هستن فقط چند تفاوت کوچک داشتن که فکر کنم اونی که شما گذاشتین ورژنش جدید تر باشه.
موفق باشید.
 

amir_s

Active Member
چه طور میتونیم از این توابع و کلاس ها استفاده کنیم که ببینیم فلان روز چند شنبه بوده !؟
 

Zanguei

Member
سلام دوست عزیز
شما باید توسط با استفاده از تابع require_once فایل مربوط مبدل تاریخ رو در صفحه خودتون لود کنید و باقی راه مشابه استفاده از تابع date در php می باشد. به همین راحتی. فقط به جای استفاده از تابع date از تابع pdate یا jdate هر کدام که در فایل مبدل وجود داشت استفاده می کنید.
موفق باشید.
 

جدیدترین ارسال ها

بالا