Use local time
This commit is contained in:
@@ -108,32 +108,27 @@ app.get('/api/hourly', async (req, res) => {
|
||||
|
||||
app.get('/api/daily', async (req, res) => {
|
||||
const { fields } = req.query
|
||||
const now = new Date()
|
||||
const now = new Date()
|
||||
const todayStart = new Date(now)
|
||||
todayStart.setHours(0, 0, 0, 0)
|
||||
const next = new Date(todayStart)
|
||||
next.setDate(todayStart.getDate() + 1)
|
||||
|
||||
// Use local midnight as "today" boundary
|
||||
const offset = tzOffsetMinutes(now)
|
||||
const localNow = new Date(now.getTime() + offset * 60_000)
|
||||
localNow.setUTCHours(0, 0, 0, 0)
|
||||
const todayLocal = new Date(localNow.getTime() - offset * 60_000) // back to UTC
|
||||
const nextLocal = new Date(todayLocal.getTime() + 24 * 3600_000)
|
||||
|
||||
const start = req.query.start ? new Date(req.query.start) : todayLocal
|
||||
const end = req.query.end ? new Date(req.query.end) : nextLocal
|
||||
|
||||
const coords = await getCoords()
|
||||
const start = req.query.start ? new Date(req.query.start) : todayStart
|
||||
const end = req.query.end ? new Date(req.query.end) : next
|
||||
|
||||
const coords = await getCoords()
|
||||
const todayStr = localDateStr(now)
|
||||
const usePhysics = lastForecast.summary && start <= now && end > now
|
||||
|
||||
const [sensorResult] = await Promise.allSettled([start < now ? queryDaily(start, now) : Promise.resolve([])])
|
||||
const history = sensorResult.status === 'fulfilled' ? sensorResult.value : []
|
||||
|
||||
const meteoFrom = new Date(Math.max(nextLocal.getTime(), start.getTime()))
|
||||
const [meteoResult] = await Promise.allSettled([end > nextLocal ? dailyWeather(coords.latitude, coords.longitude, meteoFrom, end) : Promise.resolve([])])
|
||||
const meteoFrom = new Date(Math.max(next.getTime(), start.getTime()))
|
||||
const [meteoResult] = await Promise.allSettled([end > next ? dailyWeather(coords.latitude, coords.longitude, meteoFrom, end) : Promise.resolve([])])
|
||||
const meteo = meteoResult.status === 'fulfilled' ? meteoResult.value : []
|
||||
|
||||
const todaySlot = usePhysics ? [lastForecast.summary] : []
|
||||
// Filter meteo using local date string so we never double-count today
|
||||
const meteoClean = meteo.filter(r => localDateStr(new Date(r.time)) !== todayStr)
|
||||
|
||||
const daily = getCelestialForecast(coords.latitude, coords.longitude, [...history, ...todaySlot, ...meteoClean])
|
||||
|
||||
Reference in New Issue
Block a user