From c9264ed5e2490b1aa1930f60f9025eddfb4b8660 Mon Sep 17 00:00:00 2001 From: PeHon Date: Mon, 4 May 2020 21:26:08 +0800 Subject: [PATCH 1/2] Fixed issue when Sunrise timing is 2300 while current time is 2330, isDayTime wrongly shows false. --- Solar/Solar.swift | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/Solar/Solar.swift b/Solar/Solar.swift index d2d67e6..34955b2 100644 --- a/Solar/Solar.swift +++ b/Solar/Solar.swift @@ -214,14 +214,35 @@ extension Solar { return false } - let beginningOfDay = sunrise.timeIntervalSince1970 - let endOfDay = sunset.timeIntervalSince1970 + let todaySunrise = sunrise.timeIntervalSince1970 + let todaySunset = sunset.timeIntervalSince1970 let currentTime = self.date.timeIntervalSince1970 - let isSunriseOrLater = currentTime >= beginningOfDay - let isBeforeSunset = currentTime < endOfDay + var yesterday = Date() + if #available(iOSApplicationExtension 13.0, *) { + yesterday = date.advanced(by: TimeInterval(exactly: -86400.0)!) + } else { + + yesterday = date.addingTimeInterval(TimeInterval(exactly: -86400.0)!) + } + let yesterdaySunrise = calculate(.sunrise, for: yesterday, and: .official)?.timeIntervalSince1970 + let yesterdaySunset = calculate(.sunset, for: yesterday, and: .official)?.timeIntervalSince1970 + + var tomorrow = Date() + if #available(iOSApplicationExtension 13.0, *) { + tomorrow = date.advanced(by: TimeInterval(exactly: 86400.0)!) + } else { + tomorrow = date.addingTimeInterval(TimeInterval(exactly: 86400.0)!) + } + + let tomorrowSunrise = calculate(.sunrise, for: tomorrow, and: .official)?.timeIntervalSince1970 + let tomorrowSunSet = calculate(.sunset, for: tomorrow, and: .official)?.timeIntervalSince1970 + + let isDayYesterday = yesterdaySunrise! < currentTime && currentTime < yesterdaySunset! + let isDayToday = todaySunrise < currentTime && currentTime < todaySunset + let isDayTomorrow = tomorrowSunrise! < currentTime && currentTime < tomorrowSunSet! - return isSunriseOrLater && isBeforeSunset + return isDayYesterday || isDayToday || isDayTomorrow } /// Whether the location specified by the `latitude` and `longitude` is in nighttime on `date` From 9d30448f802bfe1feb10108dc567f892d1f719c9 Mon Sep 17 00:00:00 2001 From: Pehon1 Date: Mon, 4 May 2020 21:55:13 +0800 Subject: [PATCH 2/2] Update Solar.swift fixed compatibility issues --- Solar/Solar.swift | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/Solar/Solar.swift b/Solar/Solar.swift index 34955b2..b244b20 100644 --- a/Solar/Solar.swift +++ b/Solar/Solar.swift @@ -218,23 +218,11 @@ extension Solar { let todaySunset = sunset.timeIntervalSince1970 let currentTime = self.date.timeIntervalSince1970 - var yesterday = Date() - if #available(iOSApplicationExtension 13.0, *) { - yesterday = date.advanced(by: TimeInterval(exactly: -86400.0)!) - } else { - - yesterday = date.addingTimeInterval(TimeInterval(exactly: -86400.0)!) - } + let yesterday = date.addingTimeInterval(TimeInterval(exactly: -86400.0)!) let yesterdaySunrise = calculate(.sunrise, for: yesterday, and: .official)?.timeIntervalSince1970 let yesterdaySunset = calculate(.sunset, for: yesterday, and: .official)?.timeIntervalSince1970 - var tomorrow = Date() - if #available(iOSApplicationExtension 13.0, *) { - tomorrow = date.advanced(by: TimeInterval(exactly: 86400.0)!) - } else { - tomorrow = date.addingTimeInterval(TimeInterval(exactly: 86400.0)!) - } - + let tomorrow = date.addingTimeInterval(TimeInterval(exactly: 86400.0)!) let tomorrowSunrise = calculate(.sunrise, for: tomorrow, and: .official)?.timeIntervalSince1970 let tomorrowSunSet = calculate(.sunset, for: tomorrow, and: .official)?.timeIntervalSince1970