Files
weather-station/server/src/config.mjs

44 lines
1.6 KiB
JavaScript

import { config } from 'dotenv'
import { resolve, dirname } from 'path'
import { fileURLToPath } from 'url'
const ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '../..')
export function cfg() {
config({ path: resolve(ROOT, '.env'), override: true })
config({ path: resolve(ROOT, '.env.local'), override: true })
return {
PORT: process.env.PORT || 3000,
ADSB_URL: process.env.ADSB_URL || '',
DB_HOST: process.env.DB_HOST || 'http://localhost:8428',
LATITUDE: parseFloat(process.env.LATITUDE || '0'),
LONGITUDE: parseFloat(process.env.LONGITUDE || '0'),
ALTITUDE: parseFloat(process.env.ALTITUDE || '0'),
TZ: process.env.TZ || 'UTC',
}
}
// Returns the UTC offset in minutes for the configured TZ at a given date
export function tzOffsetMinutes(date = new Date()) {
const tz = cfg().TZ
// Format the date in the target timezone and compare to UTC
const local = new Date(date.toLocaleString('en-US', { timeZone: tz }))
const utc = new Date(date.toLocaleString('en-US', { timeZone: 'UTC' }))
return Math.round((local - utc) / 60_000)
}
// Shift a UTC date to local-time-as-if-UTC (for day bucketing)
export function toLocalMidnight(date = new Date()) {
const offset = tzOffsetMinutes(date)
const local = new Date(date.getTime() + offset * 60_000)
local.setUTCHours(0, 0, 0, 0)
return local
}
// Get YYYY-MM-DD string in local timezone
export function localDateStr(date = new Date()) {
const offset = tzOffsetMinutes(date)
const shifted = new Date(date.getTime() + offset * 60_000)
return shifted.toISOString().slice(0, 10)
}