مشكل عجيب در تاريخ شمسي با مرورگر mozilla

jaberphp

Member
سلام من يك كد تاريخ شمسي دارم تو اينترنت اكسپلورر درست نشون مي ده اما تو موزيلا 100 سال جلوتر نشون ميده يعني 1485 تاريخ سيستم ام هم درسته چون در اينترنت اكسپلورر درست نشون مي شه اما تو موزيلا نه

خيلي عجيبه خواهشا راهنمايي كنيد اين هم كد

کد:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>New Page 5</TITLE>
<META content="MSHTML 6.00.2600.0" name=GENERATOR>
<META content=FrontPage.Editor.Document name=ProgId>
<META http-equiv=Content-Type content="text/html; charset=windows-1256"></HEAD>
<BODY>
<TABLE class=left cellSpacing=0 cellPadding=3 width="100%" border=0>
  <TBODY>
  <TR>
    <TD style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px; WORD-SPACING: 0px">
      <P style="MARGIN-TOP: 0px; MARGIN-BOTTOM: 0px" align=center><FONT size=4>
      <SCRIPT>
function showdate() {
    week= new Array("يكشنبه","دوشنبه","سه شنبه","چهارشنبه","پنج شنبه","جمعه","شنبه")
    months = new Array("فروردين","ارديبهشت","خرداد","تير","مرداد","شهريور","مهر","آبان","آذر","دی","بهمن","اسفند");
    a = new Date();
    d= a.getDay();
    day= 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);
}
                                  </SCRIPT>
      </FONT>
      <P align=center><FONT color=#0033cc size=4>
      <SCRIPT>showdate()</SCRIPT>
      </FONT></P></TR></TBODY></TABLE></BODY></HTML>
 

IranPardakht

Well-Known Member
مشکل از کد تاریخ شمسی نیست. احتمالا یک نقیصه در استفاده از firefox هست. چون با ie که درسته!
 

IranPardakht

Well-Known Member
اره راس میگی شما... نکنه قرارگیری کد در صفحه اهمیت خاصی داره؟!
 

mazoolagh

Active Member
مشکل نه از FF هست و نه از IE بلکه به کد یا در اصل به کدنویس برمیگرده که تفاوت عملکرد تابع getYear در مرورگرهای مختلف رو نمیدونسته.
این تابع در IE تاریخ بعد از 1999 رو 4 رقمی برمیگردونه (مثل 2007) و تاریخ بین 1900 تا 1999 رو دو رقمی برمیگردونه.
در JS V1 که در FF و Opera استفاده میشه همیشه اختلاف سال رو با 1900 برمیگردونه که برای 2007 میشه 107 و بهمین خاطر هست که شما در FF و Opera مقدار سال رو نادرست میبینین.

به مابقی کد کاری ندارم ولی بعد از خط
کد:
year= a.getYear();
خط زیر رو اضافه کنین:
کد:
year=(window.navigator.userAgent.indexOf('MSIE')>0)? year:1900+year;
 

mortezajs

New Member
می گم مازولاق خان، از Parse نمی شه استفاده کرد؟
اگه بشه نیازی به شرط هم نداره و کارایی بهتری در بقیه مرورگرها داره.
 

mazoolagh

Active Member
راستش رو بخواین اصولا" نیازی به چک کردن مرورگر نیست و فقط کافی هست که بجای متد getYear از متد getFullYear استفاده بشه که همیشه سال رو 4 رقمی برمیگردونه و مشکل رو حل میکنه (کار درست هم همین هست) ولی من اینجا خواستم یک نمونه از تشخیص مرورگر هم بگذارم چون گاهی اوقات بدون این روشها هیچ راهی نیست.

ضمنا" این کد چون سمت کلاینت اجرا میشه تاریخ سیستم کاربر رو نشون میده که ممکنه با تاریخ دقیق متفاوت باشه. پیشنهاد میشه همیشه از کد سمت سرور برای محاسبه ساعت و تاریخ استفاده کنین.
 

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

بالا