2024-07-16 02:41:00 +04:00

71 lines
2.0 KiB
Swift

import Foundation
func emojiFor(for meteocode: Int, timestamp: Int32) -> String {
var emoji = weatherEmoji(for: meteocode)
if ["☀️", "🌤️"].contains(emoji) {
emoji = moonPhaseEmoji(for: timestamp)
}
return emoji
}
func moonPhaseEmoji(for timestamp: Int32) -> String {
let newMoonDate = Date(timeIntervalSince1970: 1612137600)
let date = Date(timeIntervalSince1970: Double(timestamp))
let lunarMonth: TimeInterval = 29.53058867 * 24 * 60 * 60
let daysSinceNewMoon = date.timeIntervalSince(newMoonDate) / (24 * 60 * 60)
let currentMoonPhase = daysSinceNewMoon.truncatingRemainder(dividingBy: lunarMonth) / lunarMonth
switch currentMoonPhase {
case 0..<0.03:
return "🌑"
case 0.03..<0.22:
return "🌒"
case 0.22..<0.28:
return "🌓"
case 0.28..<0.47:
return "🌔"
case 0.47..<0.53:
return "🌕"
case 0.53..<0.72:
return "🌖"
case 0.72..<0.78:
return "🌗"
case 0.78..<0.97:
return "🌘"
default:
return "🌑"
}
}
func weatherEmoji(for meteocode: Int) -> String {
switch meteocode {
case 0:
return "☀️"
case 1, 2, 3:
return "🌤️"
case 45, 48:
return "🌫️"
case 51, 53, 55:
return "🌧️" // Drizzle: Light, moderate, and dense intensity
case 56, 57:
return "🌧️" // Freezing Drizzle: Light and dense intensity
case 61, 63, 65:
return "🌧️" // Rain: Slight, moderate, and heavy intensity
case 66, 67:
return "🌧️" // Freezing Rain: Light and heavy intensity
case 71, 73, 75:
return "🌨️" // Snow fall: Slight, moderate, and heavy intensity
case 77:
return "🌨️" // Snow grains
case 80, 81, 82:
return "🌦️" // Rain showers: Slight, moderate, and violent
case 85, 86:
return "🌨️"
case 95, 96, 99:
return "⛈️" // Thunderstorm: Slight or moderate
default:
return ""
}
}