41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
|
|
export interface SunTimes {
|
|
date: string;
|
|
sunrise: string;
|
|
sunset: string;
|
|
}
|
|
|
|
// Calcul approximatif du lever/coucher du soleil pour Fakarava
|
|
// Coordonnées de Fakarava (Rotoava) : -16.3167, -145.6167
|
|
// En production, utiliser une API comme https://sunrise-sunset.org/api
|
|
const calculateSunTimes = (date: Date, lat: number = -16.3167, lng: number = -145.6167): SunTimes => {
|
|
// Calcul simplifié (formule approximative)
|
|
const dayOfYear = Math.floor((date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000);
|
|
const declination = 23.45 * Math.sin((360 * (284 + dayOfYear) / 365) * Math.PI / 180);
|
|
const hourAngle = Math.acos(-Math.tan(lat * Math.PI / 180) * Math.tan(declination * Math.PI / 180)) * 180 / Math.PI;
|
|
|
|
const sunriseHour = 12 - hourAngle / 15 - (lng / 15);
|
|
const sunsetHour = 12 + hourAngle / 15 - (lng / 15);
|
|
|
|
const formatTime = (hour: number) => {
|
|
const h = Math.floor(hour);
|
|
const m = Math.floor((hour - h) * 60);
|
|
return `${h.toString().padStart(2, "0")}:${m.toString().padStart(2, "0")}`;
|
|
};
|
|
|
|
return {
|
|
date: date.toISOString().split("T")[0],
|
|
sunrise: formatTime(sunriseHour),
|
|
sunset: formatTime(sunsetHour),
|
|
};
|
|
};
|
|
|
|
export async function GET() {
|
|
const today = new Date();
|
|
const sunTimes = calculateSunTimes(today);
|
|
|
|
return NextResponse.json(sunTimes);
|
|
}
|
|
|