PDA

View Full Version : ساخت تقویم ماهیانه شمسی



rezsat
پنج شنبه 27 بهمن 1384, 19:15 عصر
سلام.من یه کد جاوا پیدا کردم که تقویم ماهیانه شمسی هست.ولی یه مشکل داره اونم اینه که تا سال 83 هست.از جاوا کاران محترم خواهشمندم یه نگاه بهش بندازن و ببینن اگه میشه که حتما میشه اینو کلیش کنن یا حداقل تا 10 سال بعدشو بسازن براش.
اینم کد:
--------------------------------------------------------------------------------


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML dir=rtl>
<HEAD>
<TITLE>تقویم</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META http-equiv=Content-Style-Type content="text/css; charset=utf-8">
<META http-equiv=Content-Language content=fa>
<SCRIPT language=JavaScript>
<!--

function SymError()
{
return true;
}

window.onerror = SymError;

var SymRealWinOpen = window.open;

function SymWinOpen(url, name, attributes)
{
return (new Object());
}

window.open = SymWinOpen;

//-->
</SCRIPT>

<SCRIPT language=JavaScript type=text/javascript>


var grgSumOfDays=Array(Array(0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365),Array(0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366));
var hshSumOfDays=Array(Array(0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 365), Array(0, 31, 62, 93, 124, 155, 186, 216, 246, 276, 306, 336, 366));

function ToShamsi(grgYear,grgMonth,grgDay,Format)
{
var hshYear = grgYear-621;
var hshMonth,hshDay;

var grgLeap=grgIsLeap (grgYear);
var hshLeap=hshIsLeap (hshYear-1);

var hshElapsed;
var grgElapsed = grgSumOfDays[(grgLeap ? 1:0)][grgMonth-1]+grgDay;

var XmasToNorooz = (hshLeap && grgLeap) ? 80 : 79;

if (grgElapsed <= XmasToNorooz)
{
hshElapsed = grgElapsed+286;
hshYear--;
if (hshLeap && !grgLeap)
hshElapsed++;
}
else
{
hshElapsed = grgElapsed - XmasToNorooz;
hshLeap = hshIsLeap (hshYear);
}

for (var i=1; i <= 12 ; i++)
{
if (hshSumOfDays [(hshLeap ? 1:0)][i] >= hshElapsed)
{
hshMonth = i;
hshDay = hshElapsed - hshSumOfDays [(hshLeap ? 1:0)][i-1];
break;
}
}


if (Format=="Long")
return hshDayName (hshDayOfWeek(hshYear,hshMonth,hshDay)) + " " + hshDay + " " + calNames("hf", hshMonth-1) + " " + hshYear;
else
return hshYear + " /" + hshMonth + " /" + hshDay;
}


function ToGregorian (hshYear,hshMonth,hshDay)
{
var grgYear = hshYear+621;
var grgMonth,grgDay;

var hshLeap=hshIsLeap (hshYear);
var grgLeap=grgIsLeap (grgYear);

var hshElapsed=hshSumOfDays [hshLeap ? 1:0][hshMonth-1]+hshDay;
var grgElapsed;

if (hshMonth > 10 || (hshMonth == 10 && hshElapsed > 286+(grgLeap ? 1:0)))
{
grgElapsed = hshElapsed - (286 + (grgLeap ? 1:0));
grgLeap = grgIsLeap (++grgYear);
}
else
{
hshLeap = hshIsLeap (hshYear-1);
grgElapsed = hshElapsed + 79 + (hshLeap ? 1:0) - (grgIsLeap(grgYear-1) ? 1:0);
}

for (var i=1; i <= 12; i++)
{
if (grgSumOfDays [grgLeap ? 1:0][i] >= grgElapsed)
{
grgMonth = i;
grgDay = grgElapsed - grgSumOfDays [grgLeap ? 1:0][i-1];
break;
}
}

return grgYear+"-"+grgMonth+"-"+grgDay;
}

function grgIsLeap (Year)
{
return ((Year%4) == 0 && ((Year%100) != 0 || (Year%400) == 0));
}

function hshIsLeap (Year)
{
Year = (Year - 474) % 128;
Year = ((Year >= 30) ? 0 : 29) + Year;
Year = Year - Math.floor(Year/33) - 1;
return ((Year % 4) == 0);
}


function hshDayOfWeek(hshYear, hshMonth, hshDay)
{
var value;
value = hshYear - 1376 + hshSumOfDays[0][hshMonth-1] + hshDay - 1;

for (var i=1380; i<hshYear; i++)
if (hshIsLeap(i)) value++;
for (var i=hshYear; i<1380; i++)
if (hshIsLeap(i)) value--;

value=value%7;
if (value<0) value=value+7;

return (value);
}

function hshDayName(DayOfWeek)
{
return calNames("df", DayOfWeek%7);
}

function calNames(calendarName, monthNo)
{
switch (calendarName)
{
case "hf": return Array("فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند")[monthNo];
case "ge": return Array(" January ", " February ", " March ", " April ", " May ", " June ", " July ", " August ", " September ", " October ", " November ", " December ")[monthNo];
case "gf": return Array("ژانویه", "فوریه", "مارس", "آوریل", "مه", "ژوثن", "ژوییه", "اوت", "سپتامبر", "اکتبر", "نوامبر", "دسامبر")[monthNo];
case "df": return Array("شنبه", "یک‌شنبه", "دوشنبه", "سه‌شنبه", "چهارشنبه", "پنج‌شنبه", "جمعه")[monthNo];
case "de": return Array("Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday")[monthNo];
}
}

</SCRIPT>

<SCRIPT language=JavaScript type=text/javascript>

/*
Hijri Shamsi (Khayyami)/Gregorian sub-labels calendar
Version 1.1

charset=utf-8

simorgh.ws
*/


function UpdateCalendar(targetId, gregorianMonths, year, month)
{
var newRow, newCell;
var currentDay=1;
var holidays=getHolidays(year, month);
var lastDay=31;
var dtToday=new Date();
var strToday=dtToday.getFullYear()+"-"+(dtToday.getMonth()+1)+"-"+dtToday.getDate();

if (month>6) lastDay--;
if (month==12 && !hshIsLeap(year)) lastDay--;


while (targetId.rows.length>0) targetId.deleteRow(0);


newRow=targetId.insertRow(0);
for (var i=0; i<hshDayOfWeek(year,month,1); i++) newRow.insertCell(-1).innerHTML="&nbsp;";
for (var i=hshDayOfWeek(year,month,1); i<7; i++) {
newCell=newRow.insertCell(-1);
newCell.className="normalDay";
newCell.innerHTML="<p class=ShamsiDayNo>" + currentDay + "</p><p dir=ltr class=GregorianDayNo>" + ToGregorian(year,month,currentDay).split("-")[2];
if (holidays.substr(currentDay-1,1)=="x") newCell.className="Holiday";
if (ToGregorian(year, month, currentDay)==strToday) newCell.className="Today";
currentDay++;
}

while (currentDay<=lastDay) {
newRow=targetId.insertRow(-1);
for (var i=0; i<7; i++) {
newCell=newRow.insertCell(-1);
newCell.innerHTML="<p class=ShamsiDayNo>" + currentDay + "</p><p dir=ltr class=GregorianDayNo>" + ToGregorian(year,month,currentDay).split("-")[2];
newCell.className="normalDay";
if (holidays.substr(currentDay-1,1)=="x") newCell.className="Holiday";
if (ToGregorian(year, month, currentDay)==strToday) newCell.className="Today";
currentDay++;
if (currentDay>lastDay) break;
}
}
for (var i=newRow.cells.length; i<7; i++) newRow.insertCell(-1).innerHTML="&nbsp;";

if (gregorianMonths != null) {
gregorianMonths.getElementsByTagName('p')[0].innerHTML=calNames("ge", ToGregorian (year,month,1).split("-")[1]-1)+" "+(ToGregorian (year,month,1).split("-")[0])+" - "+calNames("ge", ToGregorian (year,month,30).split("-")[1]-1)+" "+ToGregorian (year,month,30).split("-")[0];
gregorianMonths.getElementsByTagName('p')[1].innerHTML=calNames("gf", ToGregorian (year,month,1).split("-")[1]-1)+" "+(ToGregorian (year,month,1).split("-")[0])+" - "+calNames("gf", ToGregorian (year,month,30).split("-")[1]-1)+" "+ToGregorian (year,month,30).split("-")[0];
}
}

function FillSelectWithMonthNames(targetId)
{
for (var i=0; i<12; i++) {
var mitem = document.createElement("OPTION");
mitem.value=i+1;
mitem.text=calNames("hf", i);
targetId.options.add(mitem);
}
}

function getHolidays(year, month)
{
switch (year) {
case 1380: return Array("xxxx56789x1xx4xxx890123x567890x", "123456x890123x567890x234567x901", "x2xx567890x23xx67x9x1234x678901", "x234567x901234x678901x345678x01", "1234x678901x345678x012345x78901", "xx345678x012345x789012x456789x1", "12345x78x012x456789x12x456x890", "123x56789xx234567x901234x67890", "1x345678x012345x789012x45x789x", "123456x890123x56789xx234567x90", "1234x678901x345678x01x345x7890", "12xx56789x1x3456x890123x5678x")[month-1];
case 1381: return Array("xxxxx678x01xx45x789012x456789x1", "12345x789012x456789xx2x456x8901", "12x45678xx123xx6x890123x567890x", "123456x890123x567890x234567x901", "123x567890x234567x90x234x678901", "x234567x901234x678901x345678xx1", "1234x678901xx45678x012345x789x", "12x456789x123456x890123x567890", "x234x67x901234x678901x345678x0", "12345x78x012x456789x123456x890", "123x567890x234567x901xx4x67890", "xx345678x012345x78901xx45678x")[month-1];
case 1382: return Array("xxxx567x901xx4x678901x345678x01", "12x4x67890xx345678x012345x78x01", "1x345678x0123xxx789012x456789x1", "12345x789012x456789x123456x8901", "12x456789xx23456x890123x567890x", "123456x890123x5678x0x234567x901", "1x3x567890x234567x9x1234x67890", "1x345678x012345x789012x4x6789x", "1234x6x890123x567890x234567xx0", "1234x678901x345678x012345x7890", "12x456789x12x456x890xx3x567890", "x234567x90xx34x678901x345678x")[month-1];
case 1383: return Array("xxxx56x8901xxx567890x234567x901", "123x567890x234567x901234x678901", "x234567x90123xx678901x345678x01", "1234x678901x345678x012345x78901", "1x345678x012345x789012x456789x1", "12345x789012x456789x123456x8901", "12x456789x123456x890123x567890", "x234567x901234x678901x345678x0", "12345x789012x456789x123456x890", "123x567890x234567x901234x67890", "1x345678x012345x78901xx456789x", "123456x890123x567890x234567xx0")[month-1];
}
}

</SCRIPT>

<STYLE type=text/css>TH {
FONT: bold 10pt Tahoma; WIDTH: 62px; COLOR: black; BORDER-BOTTOM: black 1px solid; TEXT-ALIGN: center
}
.Holiday {
FILTER: alpha(opacity=65); COLOR: white; BACKGROUND-COLOR: #ff4455; TEXT-ALIGN: center
}
.Today {
FILTER: alpha(opacity=65); COLOR: white; BACKGROUND-COLOR: #5577ff; TEXT-ALIGN: center
}
.normalDay {
TEXT-ALIGN: center
}
.ShamsiDayNo {
MARGIN-TOP: 10px; MARGIN-BOTTOM: -5px; FONT: bold 14pt Tahoma
}
.GregorianDayNo {
MARGIN-TOP: 0px; MARGIN-BOTTOM: 5px; FONT: 8pt Tahoma
}
</STYLE>

<SCRIPT language=javascript>
function updCal()
{
UpdateCalendar(document.getElementById('tblCal'), document.getElementById('grgMonth'), parseInt(document.getElementById('calendar').year. value), parseInt(document.getElementById('calendar').month .value));
}
</SCRIPT>

<STYLE type=text/css>BODY {
FONT-FAMILY: Tahoma; TEXT-ALIGN: justify
}
TABLE {
FONT-FAMILY: Tahoma; TEXT-ALIGN: justify
}
A {
COLOR: #4477dd
}
A:hover {
COLOR: #ff6699
}
A.navtool {
COLOR: white; TEXT-DECORATION: none
}
A.navtool:hover {
COLOR: white; TEXT-DECORATION: none
}
.topnav {
WIDTH: 107px; COLOR: white; BORDER-BOTTOM: white 1px solid
}
.error {
FONT: bold 12pt Tahoma; COLOR: red
}
H1 {
COLOR: #000000
}
H2 {
COLOR: #000000
}
H3 {
COLOR: #000000
}
H4 {
COLOR: #000000
}
H2 {
MARGIN-TOP: 10px; MARGIN-BOTTOM: 5px; FONT-FAMILY: Tahoma
}
A.tool {
FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; TEXT-DECORATION: none
}
A.tool:hover {
FONT-WEIGHT: bold; FONT-SIZE: 10pt; COLOR: #000000; TEXT-DECORATION: none
}
</STYLE>


<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
<BODY dir=rtl>
<CENTER>
<DIV style="MARGIN-TOP: 25px; WIDTH: 750px">
<TABLE cellSpacing=0 cellPadding=0 width=750 border=0>
<TBODY>
<TR>
<TD style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; BACKGROUND: url(images/background.gif) #cccccc no-repeat right top; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; HEIGHT: 250px" vAlign=top width=700>
<TABLE cellSpacing=10 cellPadding=0 width=680 border=0>
<TBODY>
<TR>
<TD width=434 rowSpan=2>
<TABLE cellSpacing=0 cellPadding=0 width=434 border=0>
<THEAD>
<TR>
<TH>شنبه</TH>
<TH>یک‌شنبه</TH>
<TH>دوشنبه</TH>
<TH>سه‌شنبه</TH>
<TH>چهارشنبه</TH>
<TH>پنج‌شنبه</TH>
<TH>جمعه</TH></TR></THEAD>
<TBODY id=tblCal>
</TBODY>
</TABLE>
</TD>
<TD width=46>&nbsp;</TD>
<TD vAlign=top width=160>
<TABLE cellSpacing=4 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=4><IMG id=apGoCal style="DISPLAY: none" height=7 src="C:\Documents and Settings\Sattari\Desktop\Internet\farsi date_files\arrow-w(1).gif" width=4></TD>
<TD width=154><b><font size="1">تبدیل تاریخ شمسی و میلادی</font></b></TD>
</TR>
<TR>
<TD colSpan=2>&nbsp;</TD>
</TR>
<TR>
<TD class=holiday>&nbsp;</TD>
<TD><A class=tool>تعطیل</A></TD>
</TR>
<TR>
<TD class=today>&nbsp;</TD>
<TD><b><font size="2">امروز</font></b></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TR>
<TD vAlign=bottom align=middle colSpan=2>
<FORM id=calendar name=calendar onsubmit="return false;">
<P>
<SELECT style="WIDTH: 100px; font-family:Tahoma; font-size:8pt" onchange=updCal(); name=year>
<OPTION value=1380>1380
<OPTION value=1381>1381
<OPTION value=1382 selected>1382
<OPTION value=1383>1383
</OPTION>
</SELECT>
</P>
<P>
<SELECT style="WIDTH: 100px; font-family:Tahoma; font-size:8pt" onchange=updCal(); name=month></SELECT>
</P>
</FORM>
<DIV id=grgMonth>
<P dir=ltr style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: 10pt georgia; PADDING-TOP: 0px">&nbsp;</P>
<P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 10pt; PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-TOP: 0px">&nbsp;</P></DIV></TD></TR></TBODY></TABLE>

<SCRIPT language=javascript>
FillSelectWithMonthNames(document.getElementById("calendar").month);
var today=new Date();
document.getElementById("calendar").month.value=Number(ToShamsi(today.getFullYear(), today.getMonth()+1, today.getDate(),'short').split('/')[1]);
updCal();
</SCRIPT>

</TD>
</TBODY>
</TABLE>
</DIV>
</CENTER>

<SCRIPT language=JavaScript>
<!--
var SymRealOnLoad;
var SymRealOnUnload;

function SymOnUnload()
{
window.open = SymWinOpen;
if(SymRealOnUnload != null)
SymRealOnUnload();
}

function SymOnLoad()
{
if(SymRealOnLoad != null)
SymRealOnLoad();
window.open = SymRealWinOpen;
SymRealOnUnload = window.onunload;
window.onunload = SymOnUnload;
}

SymRealOnLoad = window.onload;
window.onload = SymOnLoad;

//-->
</SCRIPT>

</BODY>
</HTML>


--------------------------------

rezsat
جمعه 05 اسفند 1384, 01:33 صبح
ای بابا.خواهشن یکی کمک کنه

tabib_m
جمعه 05 اسفند 1384, 16:48 عصر
اکه کدت رو توی تک [CODE] میذاشتی خیلی بهتر بود
از این هیجی نمیشه فهمید

rezsat
دوشنبه 08 اسفند 1384, 00:03 صبح
اقا بیا.این تو تاگ کد.حالا دیگه مشکلی نیست.لطفا یکی زودتر بره سر اصل مطلب

rezaTavak
جمعه 12 اسفند 1384, 21:43 عصر
سلام

من سورس چند نوع تقویم را به فاکس بیسیک و سی و جاوا دارم آن را اگر خواستید می توانم برای شما تبدیل به جاوا اسکریپ کنم اما حداقل یک ماه طول میکشه.

rezsat
سه شنبه 16 اسفند 1384, 00:59 صبح
اقا اگه اینکارو بکنی که خیلی عالیه و کلی هم ثواب داره
راستی چرا روی همین کد کار نمیکنید.فکر کنم اگه یکم باهاش ور برید ردیف میشه ها

rezsat
سه شنبه 16 اسفند 1384, 01:02 صبح
راستی اقای محسن طبیب زاده من چیزی رو که خواستید گذاشتم.پس چی شد.لطفا اگه میشه کمک کنید

tabib_m
سه شنبه 16 اسفند 1384, 15:27 عصر
سلام
من به کد شما یه مقدار ور رفتم، دیدم که این کد خیلی خصوصی تر از این حرفاس ، منظورم اینه که این کد کاملا ساخته شده برای سالهای 1380 تا 1383 ، حتی روز های تعطیل هم توی کد به صورت دستی برای هر سال انتخاب شده. اگه بخوایم تغییرش بدیم ، باید خیلی از کد ها رو تغییر بدیم، یه جورایی باید از اول بنویسیمش :)

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

البته اگه جاواکار های حرفه ای یک نگاهی به این کد بندازن شاید بتونن یه کاریش بکنن، من که نتونستم :)

rezaTavak
سه شنبه 16 اسفند 1384, 18:18 عصر
سلام

اون کدی که من میگم از سایت projectplato یا یه همچین چیزی است. توی بخش سی آدرس سایت را دادم.

مبنای کار خیلی دقیق است و تمام تقویمهای جهان را توصیح داده:

http://www.projectpluto.com/calendar.htm

و سورس تقویم به سی است.

http://www.projectpluto.com/lunar.zip

من هم به جاوا و فاکس پرو تبدیل کردم:

http://www.barnamenevis.org/forum/showthread.php?t=29199

http://www.barnamenevis.org/forum/showthread.php?t=7624

البته من جاوا کار حرفه ای نیستم اما کد جاوا با جاوااسکریپت فرق داره.

این تابعهایی که میگم خوبیش اینه که تاریخ را به روز تبدیل میکنه و میشه به یه تاریخ عدد اضافه یا کم کرد.

rezsat
جمعه 26 اسفند 1384, 20:33 عصر
دوستان من میخوام تقویم به جاوا یا به asp باشه .نه چیز دیگه ای

cybercoder
چهارشنبه 25 مرداد 1385, 11:09 صبح
من دنبال یه تقویم فارسی با جاوا اسکریپت هستم که به صورت POPUP که نمی گن یه پنجره کوچولو باز می شه و توش تاریخ مورد نظر رو انتخاب می کنی مثل تقویم های JavaScript معمول ییطه فقط شمسیش.
اگه خدمت دوستان هست دریغ نفرمایید.
التماس دعا

موفق باشید.

pooyanm
پنج شنبه 26 مرداد 1385, 07:38 صبح
اینجا یک تقویم به صد زبان هست! از جمله js که من js را امتحان کردم جالب نبود چون ساعتها را درنظر نمی‌گرفت:
http://www.farsiweb.ir/wiki/Iranian_calendar

ولی این یکی یک چیزی دیگه است به زبان جاوا که نیاز به تبدیل داره:
http://sourceforge.net/projects/persiancalendar/