📄 sunraiseset.html
字号:
timeStr += second;
return timeStr;
}
//***********************************************************************/
//* Name: timeStringShortAMPM */
//* Type: Function */
//* Purpose: convert time of day in minutes to a zero-padded string */
//* suitable for printing to the form text fields. If time */
//* crosses a day boundary, date is appended. */
//* Arguments: */
//* minutes : time of day in minutes */
//* JD : julian day */
//* Return value: */
//* string of the format HH:MM[AM/PM] (DDMon) */
//***********************************************************************/
// timeStringShortAMPM returns a zero-padded string (HH:MM *M) given time in
// minutes and appends short date if time is > 24 or < 0, resp.
// 将分钟转换成HH:MM[AM/PM]格式。
function timeStringShortAMPM(minutes, JD)
{
var julianday = JD;
var floatHour = minutes / 60.0;
var hour = Math.floor(floatHour);
var floatMinute = 60.0 * (floatHour - Math.floor(floatHour));
var minute = Math.floor(floatMinute);
var floatSec = 60.0 * (floatMinute - Math.floor(floatMinute));
var second = Math.floor(floatSec + 0.5);
var PM = false;
minute += (second >= 30)? 1 : 0;
if (minute >= 60)
{
minute -= 60;
hour ++;
}
var daychange = false;
if (hour > 23)
{
hour -= 24;
daychange = true;
julianday += 1.0;
}
if (hour < 0)
{
hour += 24;
daychange = true;
julianday -= 1.0;
}
if (hour > 12)
{
hour -= 12;
PM = true;
}
if (hour == 12)
{
PM = true;
}
if (hour == 0)
{
PM = false;
hour = 12;
}
var timeStr = hour + ":";
if (minute < 10) // i.e. only one digit
timeStr += "0" + minute + ((PM)?"PM":"AM");
else
timeStr += "" + minute + ((PM)?"PM":"AM");
if (daychange) return timeStr + " " + calcDayFromJD(julianday);
return timeStr;
}
//***********************************************************************/
//* Name: timeStringAMPMDate */
//* Type: Function */
//* Purpose: convert time of day in minutes to a zero-padded string */
//* suitable for printing to the form text fields, and appends */
//* the date. */
//* Arguments: */
//* minutes : time of day in minutes */
//* JD : julian day */
//* Return value: */
//* string of the format HH:MM[AM/PM] DDMon */
//***********************************************************************/
// timeStringAMPMDate returns a zero-padded string (HH:MM[AM/PM]) given time
// in minutes and julian day, and appends the short date
// 将分钟转换成HH:MM[AM/PM]格式。
function timeStringAMPMDate(minutes, JD)
{
var julianday = JD;
var floatHour = minutes / 60.0;
var hour = Math.floor(floatHour);
var floatMinute = 60.0 * (floatHour - Math.floor(floatHour));
var minute = Math.floor(floatMinute);
var floatSec = 60.0 * (floatMinute - Math.floor(floatMinute));
var second = Math.floor(floatSec + 0.5);
minute += (second >= 30)? 1 : 0;
if (minute >= 60)
{
minute -= 60;
hour ++;
}
if (hour > 23)
{
hour -= 24;
julianday += 1.0;
}
if (hour < 0)
{
hour += 24;
julianday -= 1.0;
}
var PM = false;
if (hour > 12)
{
hour -= 12;
PM = true;
}
if (hour == 12)
{
PM = true;
}
if (hour == 0)
{
PM = false;
hour = 12;
}
var timeStr = hour + ":";
if (minute < 10) // i.e. only one digit
timeStr += "0" + minute + ((PM)?"PM":"AM");
else
timeStr += minute + ((PM)?"PM":"AM");
return timeStr + " " + calcDayFromJD(julianday);
}
//***********************************************************************/
//* Name: timeStringDate */
//* Type: Function */
//* Purpose: convert time of day in minutes to a zero-padded 24hr time */
//* suitable for printing to the form text fields. If time */
//* crosses a day boundary, date is appended. */
//* Arguments: */
//* minutes : time of day in minutes */
//* JD : julian day */
//* Return value: */
//* string of the format HH:MM (DDMon) */
//***********************************************************************/
// timeStringDate returns a zero-padded string (HH:MM) given time in minutes
// and julian day, and appends the short date if time crosses a day boundary
// 将分钟转换成HH:MM格式的24小时。
function timeStringDate(minutes, JD)
{
var julianday = JD;
var floatHour = minutes / 60.0;
var hour = Math.floor(floatHour);
var floatMinute = 60.0 * (floatHour - Math.floor(floatHour));
var minute = Math.floor(floatMinute);
var floatSec = 60.0 * (floatMinute - Math.floor(floatMinute));
var second = Math.floor(floatSec + 0.5);
minute += (second >= 30)? 1 : 0;
if (minute >= 60)
{
minute -= 60;
hour ++;
}
var daychange = false;
if (hour > 23)
{
hour -= 24;
julianday += 1.0;
daychange = true;
}
if (hour < 0)
{
hour += 24;
julianday -= 1.0;
daychange = true;
}
var timeStr = hour + ":";
if (minute < 10) // i.e. only one digit
timeStr += "0" + minute;
else
timeStr += minute;
if (daychange) return timeStr + " " + calcDayFromJD(julianday);
return timeStr;
}
//***********************************************************************/
//* Name: calcSun */
//* Type: Main Function called by form controls */
//* Purpose: calculate time of sunrise and sunset for the entered date */
//* and location. In the special cases near earth's poles, */
//* the date of nearest sunrise and set are reported. */
//* Arguments: */
//* riseSetForm : for displaying results */
//* latLongForm : for reading latitude and longitude data */
//* index : daylight saving yes/no select */
//* index2 : city select index */
//* Return value: */
//* none */
//* (fills riseSetForm text fields with results of calculations) */
//***********************************************************************/
// 计算表单中输入的日期和位置的日出日落的时间。
function calcSun(riseSetForm, latLongForm, index, index2)
{
if(index2 != 0)
{
setLatLong(latLongForm, index2);
}
var latitude = getLatitude(latLongForm);
var longitude = getLongitude(latLongForm);
var indexRS = riseSetForm.mos.selectedIndex
if (isValidInput(riseSetForm, indexRS, latLongForm))
{
if((latitude >= -90) && (latitude < -89))
{
alert("All latitudes between 89 and 90 S\n will be set to -89");
latLongForm["latDeg"].value = -89;
latitude = -89;
}
if ((latitude <= 90) && (latitude > 89))
{
alert("All latitudes between 89 and 90 N\n will be set to 89");
latLongForm["latDeg"].value = 89;
latitude = 89;
}
//***** Calculate the time of sunrise
//*********************************************************************/
//**************** NEW STUFF ****** 一月, 2001 ****************
//*********************************************************************/
var JD = calcJD(parseFloat(riseSetForm["year"].value), indexRS + 1, parseFloat(riseSetForm["day"].value));
var dow = calcDayOfWeek(JD);
var doy = calcDayOfYear(indexRS + 1, parseFloat(riseSetForm["day"].value), isLeapYear(riseSetForm["year"].value));
var T = calcTimeJulianCent(JD);
var alpha = calcSunRtAscension(T);
var theta = calcSunDeclination(T);
var Etime = calcEquationOfTime(T);
//riseSetForm["dbug"].value = doy;
//*********************************************************************/
var eqTime = Etime;
var solarDec = theta;
// Calculate sunrise for this date
// if no sunrise is found, set flag nosunrise
var nosunrise = false;
var riseTimeGMT = calcSunriseUTC(JD, latitude, longitude);
if (!isNumber(riseTimeGMT))
{
nosunrise = true;
}
// Calculate sunset for this date
// if no sunset is found, set flag nosunset
var nosunset = false;
var setTimeGMT = calcSunsetUTC(JD, latitude, longitude);
if (!isNumber(setTimeGMT))
{
nosunset = true;
}
var daySavings = YesNo[index].value; // = 0 (no) or 60 (yes)
var zone = latLongForm["hrsToGMT"].value;
if(zone > 12 || zone < -12.5)
{
alert("The offset must be between -12.5 and 12. \n Setting \"Off-Set\"=0");
zone = "0";
latLongForm["hrsToGMT"].value = zone;
}
if (!nosunrise) // Sunrise was found
{
var riseTimeLST = riseTimeGMT - (60 * zone) + daySavings;
// in minutes
var riseStr = timeStringShortAMPM(riseTimeLST, JD);
var utcRiseStr = timeStringDate(riseTimeGMT, JD);
riseSetForm["sunrise"].value = riseStr;
riseSetForm["utcsunrise"].value = utcRiseStr;
}
if (!nosunset) // Sunset was found
{
var setTimeLST = setTimeGMT - (60 * zone) + daySavings;
var setStr = timeStringShortAMPM(setTimeLST, JD);
var utcSetStr = timeStringDate(setTimeGMT, JD);
riseSetForm["sunset"].value = setStr;
riseSetForm["utcsunset"].value = utcSetStr;
}
// Calculate solar noon for this date
var solNoonGMT = calcSolNoonUTC(T, longitude);
var solNoonLST = solNoonGMT - (60 * zone) + daySavings;
var solnStr = timeString(solNoonLST);
var utcSolnStr = timeString(solNoonGMT);
riseSetForm["solnoon"].value = solnStr;
riseSetForm["utcsolnoon"].value = utcSolnStr;
var tsnoon = calcTimeJulianCent(calcJDFromJulianCent(T) -0.5 + solNoonGMT/1440.0);
eqTime = calcEquationOfTime(tsnoon);
solarDec = calcSunDeclination(tsnoon);
riseSetForm["eqTime"].value = (Math.floor(100*eqTime))/100;
riseSetForm["solarDec"].value = (Math.floor(100*(solarDec)))/100;
//***********Convert lat and long to standard format
convLatLong(latLongForm);
// report special cases of no sunrise
if(nosunrise)
{
riseSetForm["utcsunrise"].value = "";
// if Northern hemisphere and spring or summer, OR
// if Southern hemisphere and fall or winter, use
// previous sunrise and next sunset
if ( ((latitude > 66.4) && (doy > 79) && (doy < 267)) ||
((latitude < -66.4) && ((doy < 83) || (doy > 263))) )
{
newjd = findRecentSunrise(JD, latitude, longitude);
newtime = calcSunriseUTC(newjd, latitude, longitude)
- (60 * zone) + daySavings;
if (newtime > 1440)
{
newtime -= 1440;
newjd += 1.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -