@nrweb/astro-calc
Version:
Comprehensive astrological calculations using Swiss Ephemeris and astronomy-engine for positions, aspects, houses, lots, and scoring metrics
46 lines • 2.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const retrograde_1 = require("./retrograde");
const constants_1 = require("./constants");
function generateRetrogradeCalendar(startDate, years) {
const calendar = {};
const endDate = new Date(startDate.getTime() + years * 365 * 24 * 60 * 60 * 1000);
// Initialize calendar with empty arrays for each planet
constants_1.RETROGRADE_PLANETS.forEach((planet) => {
calendar[planet.toString()] = [];
});
// For each planet, find all retrograde periods
constants_1.RETROGRADE_PLANETS.forEach((planet) => {
console.log(`Finding retrograde periods for ${planet}...`);
let currentDate = new Date(startDate);
let inRetrograde = false;
let periodStart = null;
while (currentDate < endDate) {
const retro = (0, retrograde_1.isRetrograde)(currentDate, planet);
if (!inRetrograde && retro) {
inRetrograde = true;
periodStart = new Date(currentDate);
}
else if (inRetrograde && !retro && periodStart) {
inRetrograde = false;
calendar[planet.toString()].push({
startDate: periodStart.toISOString().split("T")[0],
endDate: new Date(currentDate.getTime() - 24 * 60 * 60 * 1000)
.toISOString()
.split("T")[0],
});
periodStart = null;
}
currentDate = new Date(currentDate.getTime() + 24 * 60 * 60 * 1000);
}
// Handle case where planet is still in retrograde at end date
if (inRetrograde && periodStart) {
calendar[planet.toString()].push({
startDate: periodStart.toISOString().split("T")[0],
endDate: endDate.toISOString().split("T")[0],
});
}
});
return calendar;
}
//# sourceMappingURL=generate-retrograde-calendar.js.map