تاريخ فارسي!

Salar

Active Member
کسی کدی داره که هم تو firefox و Internet Explorer یه تاریخ رو نشون بده! من اون کدی که ایمان تو تاپیک دیگه گذاشته بود رو امتحان کردم! تو Internet Explorer 1383 بود ولی تو Firefox 1483 بود!!!! 8O
 

mazoolagh

Active Member
منطقي نيست - كدهاي server side به مرورگر بستگي نداره - يعني براي همه مرورگرها اطلاعات يكسان ارسال ميشه كه ممكنه در نحوه نمايش جزيي اختلاف داشته باشند ولي نميشه بجاي 1383 مقدار 1483 رو نشون بده!!!
 

Salar

Active Member
حالا چی؟

اولی رو از firefox و دومی رو از Internet Explorer گرفتم!
 

mazoolagh

Active Member
سالار خان
سلام - ميشه لطف كني و سورس كامل اين صفحه رو بگذاري

من هنوز تو فكرم چه جوري ميشه كدي كه سمت سرور پردازش ميشه و حاصلش فقط يك رشته متن هست كه براي كلاينت ارسال ميشه در دو مرورگر مختلف به دو شكل ديده بشه. اگر ميگم منطقي نيست يعني براي خودم قابل قبول نيست و تعجب آور هست. براي همين هم با وجود اين كه اطمينان داشتم بازهم قبل از پست فايلشو دانلود كردم و تو يك صفحه خالي پي اچ پي (يعني صفحه اي كه هيچ كار ديگه اي جز محاسبه همين تاريخ انجام نميده) گذاشتم و با ie-firefox-opera امتحان كردم هر سه يك عبارت نشون ميدادن!

اگر سورس كامل صفحه رو بگذاري ميشه علت رو فهميد.
 

mazoolagh

Active Member
سالار خان 2 نكته!
اول اينكه شما نگفتي كه كدت client side هست - من فكر ميكردم منظورت currentjdate هست يعني اين:

کد:
<html>
<head>
</head>
<body>
<?php

// 

$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); 



function gregorian_to_jalali($g_y, $g_m, $g_d) 
{ 
global $g_days_in_month; 

	global $j_days_in_month; 

	
$div = create_function('$a,$b','return (int) ($a / $b);'); 


	$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 jalali_to_gregorian($j_y, $j_m, $j_d) 
{ 

	global $g_days_in_month; 

	global $j_days_in_month; 

	
$div = create_function('$a,$b','return (int) ($a / $b);'); 


	$jy = $j_y-979; 

	$jm = $j_m-1; 

	$jd = $j_d-1; 

	
$j_day_no = 365*$jy + $div($jy, 33)*8 + $div($jy%33+3, 4); 

	for ($i=0; $i < $jm; ++$i) 

	$j_day_no += $j_days_in_month[$i]; 

	
$j_day_no += $jd; 

$g_day_no = $j_day_no+79; 


	$gy = 1600 + 400*$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*$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*$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 += $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); 

	}

//=============================================================================================================//
$week= Array("Thursday" => "پنجشنبه","Saturday" => "شنبه","Sunday" => "يكشنبه","Monday" => "دوشنبه","Tuesday" => "سه شنبه","Wednesday" => "چهارشنبه","Friday" => "جمعه");

$month = Array("فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دي","بهمن","اسفند");

list( $gyear, $gmonth, $gday ) = preg_split ('/-/',date ("Y-m-d"));

list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($gyear, $gmonth, $gday);

?>
<span dir='rtl'>
<? echo $week[date("l")]  . "، " . $jday . " " . $month[--$jmonth] . " " . $jyear; ?>
</span>
</body>
</html>

كه شما با توجه به صحبتهاي من در مورد پردازش در سمت سرور بايد به من تذكر ميدادي!

ولي كد مورد نظر شما اين هست:
کد:
function showdate() { 
week= new Array("يكشنبه","دوشنبه","سه شنبه","چهارشنبه","پنج شنبه","جمعه","شنبه") 
months = new Array("فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دي","بهمن","اسفند"); 
a = new Date(); 
d= a.getDay(); 
day= 1+a.getDate(); 
month = a.getMonth()+1; 
year= a.getYear(); 
year = (year== 0)?2000:year; 
(year<1000)? (year += 2000):true; 
year -= ( (month < 3) || ((month == 3) && (day < 21)) )? 622:621; 
switch (month) { 
case 1: (day<21)? (month=10, day+=10):(month=11, day-=20); break; 
case 2: (day<20)? (month=11, day+=11):(month=12, day-=19); break; 
case 3: (day<21)? (month=12, day+=9):(month=1, day-=20); break; 
case 4: (day<21)? (month=1, day+=11):(month=2, day-=20); break; 
case 5: 
case 6: (day<22)? (month-=3, day+=10):(month-=2, day-=21); break; 
case 7: 
case 8: 
case 9: (day<23)? (month-=3, day+=9):(month-=2, day-=22); break; 
case 10:(day<23)? (month=7, day+=8):(month=8, day-=22); break; 
case 11: 
case 12:(day<22)? (month-=3, day+=9):(month-=2, day-=21); break; 
default: break; 
} 
document.write(" "+week[d]+" "+day+" "+months[month-1]+" "+ year); 
}

دوم اينكه علت تفاوت در تاريخ مشخص هست و اون استفاده از تابع قديمي getYear كه از رده خارج هست. شما بايد بجاش از getFullYear استفاده كني. همين!

حالا بازم بگين firefox - بابا بندازين دور اين قراضه رو ... اين مايكروسافت بدبخت اينقدر بهش گير ميدن كه با جاوا مشكل داره حالا معلوم شد كه بيچاره IE چقدر كامله
 

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

بالا