(
latitude: number,
longitude: number,
date: Date = new Date(),
)
| 263 | } |
| 264 | |
| 265 | export function nextTimeChangeAtLocation( |
| 266 | latitude: number, |
| 267 | longitude: number, |
| 268 | date: Date = new Date(), |
| 269 | ): number { |
| 270 | const time = getSunsetSunriseUTCTime(latitude, longitude, date); |
| 271 | |
| 272 | if (time.alwaysDay) { |
| 273 | return date.getTime() + getDuration({days: 1}); |
| 274 | } else if (time.alwaysNight) { |
| 275 | return date.getTime() + getDuration({days: 1}); |
| 276 | } |
| 277 | |
| 278 | const [firstTimeOnDay, lastTimeOnDay] = time.sunriseTime < time.sunsetTime ? [time.sunriseTime, time.sunsetTime] : [time.sunsetTime, time.sunriseTime]; |
| 279 | const currentTime = ( |
| 280 | date.getUTCHours() * getDuration({hours: 1}) + |
| 281 | date.getUTCMinutes() * getDuration({minutes: 1}) + |
| 282 | date.getUTCSeconds() * getDuration({seconds: 1}) + |
| 283 | date.getUTCMilliseconds() |
| 284 | ); |
| 285 | |
| 286 | if (currentTime <= firstTimeOnDay!) { |
| 287 | // Timeline: |
| 288 | // --- firstTimeOnDay <---> lastTimeOnDay --- |
| 289 | // ^ |
| 290 | // Current time |
| 291 | return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, firstTimeOnDay); |
| 292 | } |
| 293 | if (currentTime <= lastTimeOnDay!) { |
| 294 | // Timeline: |
| 295 | // --- firstTimeOnDay <---> lastTimeOnDay --- |
| 296 | // ^ |
| 297 | // Current time |
| 298 | return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, lastTimeOnDay); |
| 299 | } |
| 300 | // Timeline: |
| 301 | // --- firstTimeOnDay <---> lastTimeOnDay --- |
| 302 | // ^ |
| 303 | // Current time |
| 304 | return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate() + 1, 0, 0, 0, firstTimeOnDay); |
| 305 | } |
no test coverage detected