var oSky; var aMonth, aDayLabel, aDay2Label, aMonthLabel, aMonth3Label; var oTargetDate, sTargetMS; var sTempMS; var msSecond, msMinute, msHour, msDay, msWeek, msMonth, msYear, msDecade, msGeneration, msCentury; var sDateOnly; function DSTOffset(thisMS, Month1, Day1, Hour1, Offset1, Month2, Day2, Hour2, Offset2, sDoWhat) { var thisDate, Date1, Date2; Offset1 = Offset1 - 0; Offset2 = Offset2 - 0; thisDate = new Date(); Date1 = new Date(); Date2 = new Date(); thisDate.setTime(thisMS); Date1.setTime(thisMS); Date2.setTime(thisMS); Date1.setUTCDate(1); Date1.setUTCMonth(Month1 - 1); Date1.setUTCDate(getDSDate(Date1.getTime(), Day1, Month1)); Date1.setUTCHours(Hour1); Date1.setUTCMinutes(0); Date1.setUTCSeconds(0); Date2.setUTCDate(1); Date2.setUTCMonth(Month2 - 1); Date2.setUTCDate(getDSDate(Date2.getTime(), Day2, Month2)); Date2.setUTCHours(Hour2); Date2.setUTCMinutes(0); Date2.setUTCSeconds(0); if (sDoWhat == "isDST") { if ((((thisMS >= Date1.getTime()) && (thisMS < Date2.getTime())) && (Offset1 > 0)) || (((thisMS < Date1.getTime()) || (thisMS >= Date2.getTime())) && (Offset2 > 0))) { return "True"; } else { return "False"; } } else { if ((thisMS > Date1.getTime()) && (thisMS < Date2.getTime())) { return Offset1; } else { return Offset2; } } } function mTimeZone(TZLID, AreaLoc, GMTOffset, GMTName, STName, DTName, Month1, Day1, Hour1, Offset1, Month2, Day2, Hour2, Offset2) { this.TZLID = TZLID; this.AreaLoc = AreaLoc; this.GMTOffset = GMTOffset; this.GMTName = GMTName; this.STName = STName; this.DTName = DTName; this.Month1 = Month1; this.Day1 = Day1; this.Hour1 = Hour1; this.Offset1 = Offset1; this.Month2 = Month2; this.Day2 = Day2; this.Hour2 = Hour2; this.Offset2 = Offset2; this.name = new Function("thisMS", "if ((this.Month1 != \"\") && (DSTOffset(thisMS, this.Month1, this.Day1, this.Hour1, this.Offset1, this.Month2, this.Day2, this.Hour2, this.Offset2, \"isDST\") == \"True\")) {return this.DTName;} else {return this.STName;}"); this.offset = new Function("thisMS", "return (DSTOffset(thisMS, this.Month1, this.Day1, this.Hour1, this.Offset1, this.Month2, this.Day2, this.Hour2, this.Offset2, \"Offset\")) - 0 + this.GMTOffset;"); } function getDSDate(dateMS, dayRule, monthNum) { var DSDate, dateNum, needNum, gotNum; DSDate = new Date(); DSDate.setTime(dateMS); if (dayRule.length < 3) { dateNum = 0 + dayRule; } else { if (dayRule.indexOf("Sun") > -1) { needNum = 0; } else if (dayRule.indexOf("Mon") > -1) { needNum = 1; } else if (dayRule.indexOf("Tue") > -1) { needNum = 2; } else if (dayRule.indexOf("Wed") > -1) { needNum = 3; } else if (dayRule.indexOf("Thu") > -1) { needNum = 4; } else if (dayRule.indexOf("Fri") > -1) { needNum = 5; } else if (dayRule.indexOf("Sat") > -1) { needNum = 6; } if (dayRule.indexOf("last") > -1) { dateNum = 28; DSDate.setUTCDate(dateNum); gotNum = DSDate.getUTCDay(); if (needNum > gotNum) { if ((needNum - gotNum) > 3) { dateNum -= 7 - needNum + gotNum; } else { dateStep = needNum - gotNum; dateNum += dateStep; DSDate.setUTCDate(dateNum); if (DSDate.getUTCMonth() != (monthNum - 1)) { dateNum -= 7; } } } else if (needNum < gotNum) { if ((gotNum - needNum) <= 3) { dateNum -= gotNum - needNum; } else { dateStep = 7 - gotNum + needNum; dateNum += dateStep; DSDate.setUTCDate(dateNum); if (DSDate.getUTCMonth() != (monthNum - 1)) { dateNum -= 7; } } } } else { dateNum = dayRule.substr(5) - 0; DSDate.setUTCDate(dateNum); gotNum = DSDate.getUTCDay(); if (needNum > gotNum) { dateNum += needNum - gotNum; } else if (needNum < gotNum) { dateNum += 7 + needNum - gotNum; } } } return dateNum; } function mSToDisplay(thisMS) { thisMS = parseInt(thisMS) + aTimeZone[sSelectedTimeZone].offset(thisMS) * msMinute; return (thisMS); // was: return (parseInt(thisMS) + parseInt(aTimeZone[sSelectedTimeZone].GMTOffset * msMinute)); } function mSToDisplayDate(thisMS) { var thisDate; thisMS = parseInt(thisMS) + parseInt(aTimeZone[sSelectedTimeZone].GMTOffset * msMinute); thisMS += ((aTimeZone[sSelectedTimeZone].offset(thisMS) - aTimeZone[sSelectedTimeZone].GMTOffset) * msMinute); thisDate = new Date(); thisDate.setTime(thisMS); return (aMonthLabel[thisDate.getUTCMonth()] + " " + thisDate.getUTCDate()); } function mSToDisplayFullDate(thisMS) { var thisDate; thisMS = parseInt(thisMS) + parseInt(aTimeZone[sSelectedTimeZone].GMTOffset * msMinute); thisMS += ((aTimeZone[sSelectedTimeZone].offset(thisMS) - aTimeZone[sSelectedTimeZone].GMTOffset) * msMinute); thisDate = new Date(); thisDate.setTime(thisMS); return (aDayLabel[thisDate.getUTCDay()] + ", " + aMonthLabel[thisDate.getUTCMonth()] + " " + thisDate.getUTCDate() + ", " + thisDate.getUTCFullYear()); } function mSToDayTimeString(thisMS) { var thisDate; thisDate = new Date(); thisDate.setTime(thisMS); return (aDayLabel[thisDate.getUTCDay()] + " " + mSToTimeString(thisMS)); } function mSToDayDateString(thisMS) { var thisDate; thisDate = new Date(); thisDate.setTime(thisMS); return (aDayLabel[thisDate.getUTCDay()] + " " + thisDate.getUTCDate()); } function mSToMonthDateString(thisMS) { var thisDate; thisDate = new Date(); thisDate.setTime(thisMS); return (aMonthLabel[thisDate.getUTCMonth()] + " " + thisDate.getUTCDate()); } function mSToDisplayTime(thisMS) { var thisDate, sThisHours, sThisMinutes, thisAMPM, sThisHourAMPM; thisMS = parseInt(thisMS) + parseInt(aTimeZone[sSelectedTimeZone].GMTOffset * msMinute); thisMS += ((aTimeZone[sSelectedTimeZone].offset(thisMS) - aTimeZone[sSelectedTimeZone].GMTOffset) * msMinute); thisDate = new Date(); thisDate.setTime(thisMS); sThisHourAMPM = getHourAMPM(thisDate.getUTCHours()); sThisHours = sThisHourAMPM.substr(0, sThisHourAMPM.indexOf(" ")); thisAMPM = sThisHourAMPM.substr(sThisHourAMPM.indexOf(" ") + 1); sThisMinutes = thisDate.getUTCMinutes() + ""; if (sThisMinutes.length == 1) { sThisMinutes = "0" + sThisMinutes } return (sThisHours + ":" + sThisMinutes + " " + thisAMPM + " " + aTimeZone[sSelectedTimeZone].name(thisMS)); } function mSToTimeString(thisMS) { var thisDate, sThisHours, sThisMinutes, thisAMPM, sThisHourAMPM; thisDate = new Date(); thisDate.setTime(thisMS); sThisHourAMPM = getHourAMPM(thisDate.getUTCHours()); sThisHours = sThisHourAMPM.substr(0, sThisHourAMPM.indexOf(" ")); thisAMPM = sThisHourAMPM.substr(sThisHourAMPM.indexOf(" ") + 1); sThisMinutes = thisDate.getUTCMinutes() + ""; if (sThisMinutes.length == 1) { sThisMinutes = "0" + sThisMinutes } return (sThisHours + ":" + sThisMinutes + " " + thisAMPM + " " + aTimeZone[sSelectedTimeZone].name(thisMS)); } function mSToDisplayString(thisMS) { var thisDate, sThisHours, sThisMinutes, thisAMPM, sThisHourAMPM; thisMS = parseInt(thisMS) + parseInt(aTimeZone[sSelectedTimeZone].GMTOffset * msMinute); thisMS += ((aTimeZone[sSelectedTimeZone].offset(thisMS) - aTimeZone[sSelectedTimeZone].GMTOffset) * msMinute); thisDate = new Date(); thisDate.setTime(thisMS); sThisHourAMPM = getHourAMPM(thisDate.getUTCHours()); sThisHours = sThisHourAMPM.substr(0, sThisHourAMPM.indexOf(" ")); thisAMPM = sThisHourAMPM.substr(sThisHourAMPM.indexOf(" ") + 1); sThisMinutes = thisDate.getUTCMinutes() + ""; if (sThisMinutes.length == 1) { sThisMinutes = "0" + sThisMinutes } return (aDayLabel[thisDate.getUTCDay()] + ", " + aMonthLabel[thisDate.getUTCMonth()] + " " + thisDate.getUTCDate() + ", " + thisDate.getUTCFullYear() + " " + sThisHours + ":" + sThisMinutes + " " + thisAMPM + " " + aTimeZone[sSelectedTimeZone].name(thisMS)); } function mSToDisplayBriefString(thisMS) { var thisMonth, thisDate, sThisHours, sThisMinutes, thisAMPM, sThisHourAMPM; thisMS = parseInt(thisMS) + parseInt(aTimeZone[sSelectedTimeZone].GMTOffset * msMinute); thisMS += ((aTimeZone[sSelectedTimeZone].offset(thisMS) - aTimeZone[sSelectedTimeZone].GMTOffset) * msMinute); thisDate = new Date(); thisDate.setTime(thisMS); sThisHourAMPM = getHourAMPM(thisDate.getUTCHours()); sThisHours = sThisHourAMPM.substr(0, sThisHourAMPM.indexOf(" ")); thisAMPM = sThisHourAMPM.substr(sThisHourAMPM.indexOf(" ") + 1); sThisMinutes = thisDate.getUTCMinutes() + ""; if (sThisMinutes.length == 1) { sThisMinutes = "0" + sThisMinutes } thisMonth = thisDate.getUTCMonth() + 1 // Fri, 12/31/2002 12:00 AM EST return (aDay2Label[thisDate.getUTCDay()] + ", " + thisMonth + "/" + thisDate.getUTCDate() + "/" + thisDate.getUTCFullYear() + " " + sThisHours + ":" + sThisMinutes + " " + thisAMPM + " " + aTimeZone[sSelectedTimeZone].name(thisMS)); } function get24Hour(sThisHour, thisAMPM) { if (thisAMPM == "AM") { if (sThisHour == 12) { sThisHour = 0; } } else { if (sThisHour < 12) { sThisHour = 12 + parseInt(sThisHour); } } return sThisHour; } function getHourAMPM(this24Hour) { if (this24Hour > 12) { sThisHourAMPM = (this24Hour - 12) + " PM"; } else { if (this24Hour == 12) { sThisHourAMPM = this24Hour + " PM"; } else { if (this24Hour == 0) { this24Hour = 12; } sThisHourAMPM = this24Hour + " AM"; } } return sThisHourAMPM; } function mMonth(name,length,offset) { this.name = name; this.length = length; this.offset = offset; } oSky = new Object; msSecond = 1000; msMinute = 60*1000; msHour = 60*60*1000; msDay = 24*60*60*1000; msWeek = 7*msDay; msMonth = 30*msDay; msYear = 365*msDay; msDecade = 10*msYear; msGeneration = 30*msYear; msCentury = 100*msYear; sNumZones = 27; aTimeZone = new Array(sNumZones + 1); aTimeZone[1] = new mTimeZone(311, "Pacific/Tongatapu", 780, "GMT+1300", "TOT", "TOST", "", "", "", "", "", "", "", ""); aTimeZone[2] = new mTimeZone(244, "Pacific/Auckland", 720, "GMT+1200", "NZST", "NZDT", "", "", "", "", "", "", "", ""); aTimeZone[3] = new mTimeZone(283, "Pacific/Guadalcanal", 660, "GMT+1100", "SBT", "SBT", "", "", "", "", "", "", "", ""); aTimeZone[4] = new mTimeZone(29, "Australia/Sydney", 600, "GMT+1000", "EST", "EST", "", "", "", "", "", "", "", ""); aTimeZone[5] = new mTimeZone(173, "Asia/Tokyo", 540, "GMT+0900", "JST", "JST", "", "", "", "", "", "", "", ""); aTimeZone[6] = new mTimeZone(100, "Asia/Shanghai", 480, "GMT+0800", "CST", "CDT", "", "", "", "", "", "", "", ""); aTimeZone[7] = new mTimeZone(306, "Asia/Bangkok", 420, "GMT+0700", "ICT", "ICT", "", "", "", "", "", "", "", ""); aTimeZone[8] = new mTimeZone(40, "Asia/Dacca", 360, "GMT+0600", "BDT", "BDT", "", "", "", "", "", "", "", ""); aTimeZone[9] = new mTimeZone(365, "Asia/Calcutta", 330, "GMT+0530", "IST", "IST", "", "", "", "", "", "", "", ""); aTimeZone[10] = new mTimeZone(254, "Asia/Karachi", 300, "GMT+0500", "PKT", "PKT", "", "", "", "", "", "", "", ""); aTimeZone[11] = new mTimeZone(2, "Asia/Dubai", 240, "GMT+0400", "GST", "GST", "", "", "", "", "", "", "", ""); aTimeZone[12] = new mTimeZone(366, "Asia/Tehran", 210, "GMT+0330", "IRT", "IRST", "", "", "", "", "", "", "", ""); aTimeZone[13] = new mTimeZone(282, "Asia/Riyadh", 180, "GMT+0300", "AST", "ADT", "", "", "", "", "", "", "", ""); aTimeZone[14] = new mTimeZone(151, "Europe/Athens", 120, "GMT+0200", "EET", "EEST", "", "", "", "", "", "", "", ""); aTimeZone[15] = new mTimeZone(111, "Europe/Berlin", 60, "GMT+0100", "CET", "CEST", "", "", "", "", "", "", "", ""); aTimeZone[16] = new mTimeZone(137, "Europe/London", 0, "GMT", "GMT", "BST", "", "", "", "", "", "", "", ""); aTimeZone[17] = new mTimeZone(262, "Atlantic/Azores", -60, "GMT-0100", "AZOT", "AZOST", "", "", "", "", "", "", "", ""); aTimeZone[18] = new mTimeZone(55, "America/Sao_Paulo", -180, "GMT-0300", "BRT", "BRST", "", "", "", "", "", "", "", ""); aTimeZone[19] = new mTimeZone(67, "America/Halifax", -240, "GMT-0400", "AST", "ADT", "", "", "", "", "", "", "", ""); aTimeZone[20] = new mTimeZone(326, "America/New_York", -300, "GMT-0500", "EST", "EDT", "", "", "", "", "", "", "", ""); aTimeZone[21] = new mTimeZone(334, "America/Chicago", -360, "GMT-0600", "CST", "CDT", "", "", "", "", "", "", "", ""); aTimeZone[22] = new mTimeZone(336, "America/Denver", -420, "GMT-0700", "MST", "MDT", "", "", "", "", "", "", "", ""); aTimeZone[23] = new mTimeZone(339, "America/Phoenix", -420, "GMT-0700", "MST", "MST", "", "", "", "", "", "", "", ""); aTimeZone[24] = new mTimeZone(340, "America/Los_Angeles", -480, "GMT-0800", "PST", "PDT", "", "", "", "", "", "", "", ""); aTimeZone[25] = new mTimeZone(342, "America/Juneau", -540, "GMT-0900", "AKST", "AKDT", "", "", "", "", "", "", "", ""); aTimeZone[26] = new mTimeZone(346, "Pacific/Honolulu", -600, "GMT-1000", "HST", "HST", "", "", "", "", "", "", "", ""); sUserTZLID = 326; sUserDST = "On"; for (var sNumZone = 1; sNumZone < sNumZones; sNumZone++) { if (sUserTZLID == aTimeZone[sNumZone].TZLID) { sSelectedTimeZone = sNumZone; } } sTargetMS = 1714204817000; sTargetMS += aTimeZone[sSelectedTimeZone].GMTOffset * msMinute; sTargetMS += (aTimeZone[sSelectedTimeZone].offset(sTargetMS) - aTimeZone[sSelectedTimeZone].GMTOffset) * msMinute; aMonthLabel = new Array(12); aMonth3Label = new Array(12); aDayLabel = new Array(7); aDay2Label = new Array(7); aDayLabel[0] = "Sunday"; aDay2Label[0] = "Su"; aDayLabel[1] = "Monday"; aDay2Label[1] = "Mo"; aDayLabel[2] = "Tuesday"; aDay2Label[2] = "Tu"; aDayLabel[3] = "Wednesday"; aDay2Label[3] = "We"; aDayLabel[4] = "Thursday"; aDay2Label[4] = "Th"; aDayLabel[5] = "Friday"; aDay2Label[5] = "Fr"; aDayLabel[6] = "Saturday"; aDay2Label[6] = "Sa"; aMonthLabel[0] = "January"; aMonth3Label[0] = "Jan"; aMonthLabel[1] = "February"; aMonth3Label[1] = "Feb"; aMonthLabel[2] = "March"; aMonth3Label[2] = "Mar"; aMonthLabel[3] = "April"; aMonth3Label[3] = "Apr"; aMonthLabel[4] = "May"; aMonth3Label[4] = "May"; aMonthLabel[5] = "June"; aMonth3Label[5] = "Jun"; aMonthLabel[6] = "July"; aMonth3Label[6] = "Jul"; aMonthLabel[7] = "August"; aMonth3Label[7] = "Aug"; aMonthLabel[8] = "September"; aMonth3Label[8] = "Sep"; aMonthLabel[9] = "October"; aMonth3Label[9] = "Oct"; aMonthLabel[10] = "November"; aMonth3Label[10] = "Nov"; aMonthLabel[11] = "December"; aMonth3Label[11] = "Dec"; aMonth = new Array(12); aMonth[1] = new mMonth("January", 31, 0); aMonth[2] = new mMonth("February", 28, 4); aMonth[3] = new mMonth("March", 31, 4); aMonth[4] = new mMonth("April", 30, 1); aMonth[5] = new mMonth("May", 31, 6); aMonth[6] = new mMonth("June", 30, 3); aMonth[7] = new mMonth("July", 31, 1); aMonth[8] = new mMonth("August", 31, 5); aMonth[9] = new mMonth("September", 30, 2); aMonth[10] = new mMonth("October", 31, 0); aMonth[11] = new mMonth("November", 30, 4); aMonth[12] = new mMonth("December", 31, 2);