Thursday, January 6, 2011

လြဲေနေသာ ျမန္မာ ျပကၡဒိန္ရက္စြဲ

အၾကင္နာနန္းေတာ္ ရဲ ႔ Side Bar မွာ ျပကၡဒိန္ရက္စြဲ ဆိုတဲ့ ေခါင္းစဥ္နဲ႔ ျမန္မာရက္စဲြေလး ေဖာ္ျပထားတာရွိပါတယ္။ အေသအခ်ာ ၾကည့္ရင္ နဲနဲ လြဲေနတဲ့ ရက္ကေလးေတြ ရွိပါတယ္။ ဘာေၾကာင့္လဲ...

အားလံုးသိၾကမွာပါ။ တစ္ႏွစ္ကို ၃၆၅ ရက္ ရွိပါတယ္။ အဲဒါက ကမၻာက ေနကုိ တစ္ပါတ္ ပါတ္မိတဲ့ အခ်ိန္ျဖစ္ပါတယ္။ ဥပမာ နာရီလက္တံက တစ္ပါတ္ပါတ္မိတဲ့ အခ်ိန္ကုိ တစ္နာရီ လုိ႔ သတ္မွတ္ထားသလုိမ်ိဳး ျဖစ္ပါတယ္။ တကယ္တမ္းက အဲဒီလို တစ္ပါတ္ ပါတ္မိဖုိ႔ ၃၆၅.၂၅ ရက္ခန္႔ျဖစ္ပါတယ္။ ဒါေၾကာင့္ ပိုပုိလာတဲ့ အခ်ိန္ေတြကို ၄ႏွစ္ျပည့္တိုင္း ရက္ထပ္ႏွစ္အျဖစ္ သတ္မွတ္ၿပီး ၃၆၆ ရက္လုပ္ယူထားတာ ျဖစ္ပါတယ္။ ဒါက အဂၤလိပ္လုိ ရက္စြဲ သေဘာတရားပါ။ တစ္လ (=၁၂ပံု တစ္ပံု) မွာ ရက္ ၃၀ ေက်ာ္ေက်ာ္ေလး ရွိပါတယ္။

ျမန္မာ ရက္စြဲကလည္း အလားတူပါပဲ။ ကြာတာက လက ကမၻာကုိ တစ္ပါတ္ ပါတ္မိတဲ့ အခ်ိန္ကုိ တစ္လ အျဖစ္ယူျခင္း ျဖစ္ပါတယ္။ လဟာ ကမၻာကို တစ္ပါတ္ ပါတ္မိဖုိ႔ ၂၈ ရက္ခန္႔ ၾကာပါတယ္။ ခုနက အဂၤလိပ္လုိ တစ္လ ၃၀ ရက္ခန္႔ နဲ႔ နဲနဲကြာသြားပါတယ္။ ဒီလို ကြာကြာသြားတာေၾကာင့္ ကမၻာက ေနကုိ ပါတ္တဲ့အခ်ိန္နဲ႔ ကုိက္ညီေအာင္ တခ်ိဳ ႔ႏွစ္ေတြမွာ ၀ါထပ္တယ္ ဆုိၿပီး အခ်ိန္ တစ္လ ထပ္တုိးၿပီး ညွိယူျခင္း ျဖစ္ပါတယ္။

ျမန္မာ ျပကၡဒိန္ရက္စြဲကို ေဖာ္ျပရာမွာ ေနသြားရက္ (အဂၤလိပ္ရက္) တစ္ရက္ကို လသြားရက္ (ျမန္မာရက္) နဲ႔ တစ္ရက္လံုးအတြက္ ေဖာ္ျပေရးဆြဲပါတယ္။ (ဒါေပမဲ့ တစ္ရက္လံုးအတြက္ မကုိက္ညီႏိုင္ပါဘူး။ ခုနက ၃၀ ရက္ နဲ႔ ၂၈ ရက္ကို ႏိႈင္းယွဥ္ၾကည့္ရင္ သိႏိုင္ပါတယ္။) အၾကင္နာနန္းေတာ္ ရဲ ႔ Side Bar မွာေဖာ္ျပထားတဲ့ ျမန္မာ ျပကၡဒိန္ရက္စြဲက Java script Program နဲ႔ ေရးသားတြက္ခ်က္ ေဖာ္ျပေပးထားတာပါ။ ရက္စြဲ+အခ်ိန္ တစ္ခုမွာ ကမၻာရဲ ႔ ေနပါတ္လမ္းေၾကာင္းမွာ တည္ရွိတဲ့ တည္ေနရာ နဲ႔ လရဲ ႔ ကမၻာပါတ္ လမ္းေၾကာင္းမွာ တည္ရွိတဲ့ေနရာ ႏွစ္ခုကို ႏိႈင္းယွဥ္ၿပီး သခ်ၤာ ေဖာ္ျမဴလာေတြနဲ႔ အဆင့္ဆင့္ တြက္ခ်က္ေဖာ္ျပျခင္း ျဖစ္ပါတယ္။ သူက ပြိဳင့္ေလး စြန္းသြားရင္ေတာင္ တစ္ရက္တုိးယူ ေဖာ္ျပမွာ ျဖစ္ပါတယ္။ တစ္နည္းေျပာရရင္ အခ်ိန္နာရီကိုပါ ထည့္သြင္း တြက္ခ်က္ျခင္း ျဖစ္ပါတယ္။ ဒါေၾကာင့္ တခ်ိဳ ႔အခ်ိန္ေတြမွာ တစ္ရက္ ပုိေနတတ္ပါတယ္။

အဲဒီ Java Script Program ရဲ ႔ Code ေတြက ေအာက္ပါအတိုင္း ျဖစ္ပါတယ္။ (Credit - Ko Wunna Ko)



//
// Original C# Code - Grand Master (Ko Wunna Ko?)
// Ported to Javascript & Changed Output to Zawgyi - Soe Min (Mark) (soemin@my-mm.org)
// License for Javascript - Non-Commercial
//

var MyanmarCalendar={
Mday:'',Myear:'',MMon:'',typeyear:'',typemonth:'',MMonth:'',HMonth:'',My:'',aTartday:'',Overdays:'',Odays:'',Firstday:'',Marthday:''
}

var PII = 0.0174532925199433;
var PIII = 57.2957795130823;

var a=b=Result1=d=t=x=t0=ut=sg=TJd=0;

function SunTransist(Year, Total) {
var Tinkan, Kali, C;
var Nyear = 0;
Tinkan = Totaldays(31, 12, (Year - 1), 0, 0);
Kali = Year + 3101;
C = (Kali - (Tinkan / 365.2587565)) * 365.2587565;
C += Tinkan;
if (Total < C)
Nyear = 0;
else if (Total >= C)
Nyear = 1;
return Nyear;
}

function TotalJdays(day, month, year, Hour, Min) {

var H1 = 0, M1 = 0;
var Tim = 0;
var Dj = 0;

H1 = 1.0*(Hour);
M1 = 1.0*(Min);

Tim = (H1 + (M1 / 60));

Dj = julday(year, month, day, Tim, 1);
Dj -= 2415019.5;
TJd = Dj;
return TJd;
}

function Totaldays(day, month, year, Hour, Min) {

var H1 = 0, M1 = 0;
var Tim = 0;
var Tot = 0, Dj = 0;

H1 = 1.0*(Hour);
M1 = 1.0*(Min);

Tim = (H1 + (M1 / 60));

Dj = julday(year, month, day, Tim, 1);
Dj -= 2415019.5;
TJd = Dj;

Tot = Dj + 1826554;
return Tot;
}

function julday(year, month, day, hour, gregflag) {
var jd = 0;
var u = 0, u0 = 0, u1 = 0, u2 = 0;
u = year;
if (month < 3) u -= 1;
u0 = u + 4712.0;
u1 = month + 1.0;
if (u1 < 4) u1 += 12.0;
jd = Math.floor(u0 * 365.25) + Math.floor(30.6 * u1 + 0.000001) + day + hour / 24.0 - 63.5;
if (gregflag == 1) {
u2 = Math.floor(Math.abs(u) / 100) - Math.floor(Math.abs(u) / 400);
if (u < 0.0) u2 = -u2;
jd = jd - u2 + 2;
if ((u < 0.0) && (u / 100 == Math.floor(u / 100)) && (u / 400 != Math.floor(u / 400)))
jd -= 1;
}
return jd;
}

function SuraMyear(day, month, Year, Wa) {
var mr = MyanmarCalendar;

var NameHm;
var ResD;
var NameMo;
var ResY = 0;
var Tyear = 0;
var MMM, MMY;
var MDay;
var My, aTartday, Overdays, Odays, Firstday, Marthday;
var total, Mo;
var Cyear =[ 0, 30, 61, 91, 122, 153, 183, 214, 244, 275, 306, 334 ];
var Zy = 0;
var SMyear =[ -1, 28, 58, 87, 117, 146, 176, 205, 235, 264, 294, 323, 353, 382, 411, 441 ];
var DMyear =[ -1, 28, 58, 87, 117, 147, 176, 206, 235, 265, 294, 324, 354, 383, 412, 442 ];
var DDMyear =[ -1, 28, 58, 88, 118, 148, 177, 207, 236, 266, 295, 325, 355, 384, 413, 443 ];
var S =[ 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30 ];
var D =[ 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30 ];
var DD =[ 29, 30, 30, 30, 30, 29, 30, 29, 30, 29, 30, 29, 30 ];
var SMon =[ 'တန္ခူး', 'ကဆုန္', 'နယုန္', 'ဝါဆို', 'ဝါေခါင္', 'ေတာ္သလင္း', 'သီတင္းကြ်တ္', 'တန္ေဆာင္မုန္း', 'နတ္ေတာ္', 'ျပာသို', 'တပို႕တြဲ', 'တေပါင္း', 'တန္ခူး', 'ကဆုန္', 'နယုန္' ];
var DMon =['တန္ခူး', 'ကဆုန္', 'နယုန္', 'ပ-ဝါဆို', 'ဒု-ဝါဆို', 'ဝါေခါင္', 'ေတာ္သလင္း', 'သီတင္းကြ်တ္', 'တန္ေဆာင္မုန္း', 'နတ္ေတာ္', 'ျပာသို', 'တပို႕တြဲ', 'တေပါင္း', 'တန္ခူး', 'ကဆုန္' ];
var Tot = Totaldays(day, month, Year, 0, 0);
Tyear = Math.abs(Year);

if ((Tyear % 4 == 0) && (Tyear % 100 != 0) || Tyear % 400 == 0)
Cyear[11] = 335;
month -= 4;
if (month < 0) {
month += 12;
if (Year <= 0)
Year++;
else
Year--;

}
if (Year == 0)
Year = -1;
Tyear = Year;
if (Tyear <= -1)
Year++;

My = Year + 3101;
aTartday = Math.floor((My * 365.2587565));
Odays = My * 11.06483;
Overdays = Math.floor(Odays % 30.0);

Firstday = aTartday - Overdays;
Marthday = Math.floor(Totaldays(31, 3, Tyear, 0, 0));
Zy = Number(Math.floor((Marthday - Firstday)));

total = Zy + Cyear[month] + day;

Mo = month;

MMY = Wa;

if (Wa == 0) {

total -= SMyear[month];
if (total > S[month]) {
total -= S[month];
month++;
if (month > 12) month -= 12;
Mo = month;
}
MDay = S[month] - 15;

} else if (Wa == 1) {
total -= DMyear[month];
if (total > D[month]) {
total -= D[month];
month++;
if (month > 12) month -= 12;
Mo = month;
}
MDay = D[month] - 15;
} else {
total -= DDMyear[month];
if (total > DD[month]) {
total -= DD[month];
month++;
if (month > 12) month -= 12;
Mo = month;
}
MDay = DD[month] - 15;
}
MMM = Mo;
if (SunTransist(Year, Tot) == 1)
ResY = Year - 638;
else if (SunTransist(Year, Tot) == 0)
ResY = Year - 639;

ResD = total;
if (ResD <= 0) {
Mo--;
if (Mo < 0) Mo += 12;
if (Wa == 0) ResD += S[Mo];
else if (Wa == 1) ResD += D[Mo];
else ResD += DD[Mo];
}
if(ResD==30){
ResD=15;
NameHm = 'လကြယ္';
}else if (ResD > 15) {
ResD -= 15;
NameHm = 'လျပည့္ေက်ာ္';
} else if (ResD == 15) {
NameHm = 'လျပည့္';
} else {
NameHm = 'လဆန္း';
}

var Yres = ResY;

if (Wa == 0)
NameMo = SMon[Mo];
else
NameMo = DMon[Mo];


if (Yres < 639)
ResY += 3739;

mr.MMon = Mo;
mr.HMonth = NameHm;
mr.Mday = ResD;
mr.MMonth = NameMo;
mr.Myear = ResY;
mr.typeyear = MMY;
mr.aTartday = aTartday;
mr.Firstday = Firstday;
mr.Odays = Odays;
mr.Overdays = Overdays;
mr.Marthday = Marthday;

return mr;
}

var d=new Date();

var mr=SuraMyear(d.getDate(),d.getMonth()+1,d.getFullYear(),0);

md=function(x){return String(x).replace(/[\d]/g,function (x){return String.fromCharCode(x.charCodeAt(0)+0x1010)})}

document.write('ျမန္မာ သကၠရာဇ္ '+md(mr.Myear)+' ခုႏွစ္ '+mr.MMonth+" "+mr.HMonth+(mr.Mday!=15?" "+md(mr.Mday)+' ရက္':''));



ေလ့လာလိုသူမ်ားအတြက္ ေဖာ္ျပေပးလုိက္ပါတယ္။ ပံုႏွိပ္ထားတဲ့ ျပကၡဒိန္ထဲက ရက္စြဲအတိုင္းျဖစ္ခ်င္ရင္ ထည့္သြင္းတြက္ခ်က္ထားတဲ့ TotalJdays(day, month, year, Hour, Min) လိုမ်ိဳး Function ေတြမွာ Hour, Minute ေတြကုိ (၀) ျဖစ္သြားေအာင္ ျပဳျပင္ေပးလိုက္ရင္ ရပါတယ္ဗ်ာ...

(အလြယ္ဆံုး နည္းလမ္္းေလး ရွိပါတယ္။ ျမန္မာရက္စဲြ အတိအက် သိခ်င္ရင္ ညသန္းေခါင္ ၁၂ နာရီ ထုိးၿပီးၿပီးခ်င္း အခ်ိန္ေလးမွာ အၾကင္နာနန္းေတာ္ ထဲကို ၀င္လာၾကည့္လိုက္ပါ။ အဲဒီျမန္မာရက္စဲြက အတိအက် ျဖစ္ပါတယ္။ မလြဲႏိုင္ပါဘူးဗ်ာ.... ဟီး)

ေပ်ာ္ရႊင္ပါေစ။ :)