-
Notifications
You must be signed in to change notification settings - Fork 73
/
Copy pathriseset.js
61 lines (52 loc) · 2 KB
/
riseset.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
/*
riseset.js - by Don Cross - 2019-06-15
Example Node.js program for Astronomy Engine:
https://github.com/cosinekitty/astronomy
This program calculates the time of the next
sunrise, sunset, moonrise, and moonset.
To execute, run the command:
node riseset latitude longitude [date]
*/
const Astronomy = require('./astronomy.js');
function DisplayEvent(name, evt) {
let text = evt ? evt.date.toISOString() : '';
console.log(name.padEnd(8) + ' : ' + text);
}
function ParseNumber(text, name) {
const x = Number(text);
if (!Number.isFinite(x)) {
console.error(`ERROR: Not a valid numeric value for ${name}: "${text}"`);
process.exit(1);
}
return x;
}
function ParseDate(text) {
const d = new Date(text);
if (!Number.isFinite(d.getTime())) {
console.error(`ERROR: Not a valid date: "${text}"`);
process.exit(1);
}
return d;
}
function Demo() {
if (process.argv.length === 4 || process.argv.length === 5) {
const latitude = ParseNumber(process.argv[2]);
const longitude = ParseNumber(process.argv[3]);
const observer = new Astronomy.Observer(latitude, longitude, 0);
const date = (process.argv.length === 5) ? ParseDate(process.argv[4]) : new Date();
let sunrise = Astronomy.SearchRiseSet(Astronomy.Body.Sun, observer, +1, date, 300);
let sunset = Astronomy.SearchRiseSet(Astronomy.Body.Sun, observer, -1, date, 300);
let moonrise = Astronomy.SearchRiseSet(Astronomy.Body.Moon, observer, +1, date, 300);
let moonset = Astronomy.SearchRiseSet(Astronomy.Body.Moon, observer, -1, date, 300);
console.log('search : ' + date.toISOString());
DisplayEvent('sunrise', sunrise);
DisplayEvent('sunset', sunset);
DisplayEvent('moonrise', moonrise);
DisplayEvent('moonset', moonset);
process.exit(0);
} else {
console.log('USAGE: node riseset.js latitude longitude [date]');
process.exit(1);
}
}
Demo();