182 lines
6.6 KiB
Swift
182 lines
6.6 KiB
Swift
//
|
||
// Date+.swift
|
||
// yinmeng-ios
|
||
//
|
||
// Created by yinmeng on 2024/2/27.
|
||
//
|
||
|
||
import Foundation
|
||
|
||
extension Date {
|
||
|
||
/// 获取当前时间戳
|
||
/// - Returns: 当前时间戳
|
||
static func getNowTimeStamp() -> Int {
|
||
let nowDate = Date.init()
|
||
//10位数时间戳
|
||
let interval = Int(nowDate.timeIntervalSince1970)
|
||
return interval
|
||
}
|
||
|
||
/// 获取当前时间字符串
|
||
/// - Returns: 当前时间戳
|
||
static func getNowTimeString(dateFormat: String) -> String {
|
||
let dateformatter = DateFormatter()
|
||
dateformatter.dateFormat = dateFormat
|
||
let nowDate = Date.init()
|
||
return dateformatter.string(from: nowDate)
|
||
}
|
||
|
||
|
||
|
||
/// 时间戳转换时间字符串
|
||
/// - Parameters:
|
||
/// - timeStamp: 时间戳
|
||
/// - dateFormat: 自定义日期格式(如:yyyy-MM-dd HH:mm:ss)
|
||
/// - Returns: 时间字符串
|
||
static func getTimeString(timeStamp: Int, dateFormat: String) -> String {
|
||
let date = Date(timeIntervalSince1970: TimeInterval.init(timeStamp))
|
||
let dateformatter = DateFormatter()
|
||
dateformatter.dateFormat = dateFormat
|
||
return dateformatter.string(from: date)
|
||
}
|
||
|
||
|
||
/// 日期转Date
|
||
/// - Parameters:
|
||
/// - timeString: 日期字符串
|
||
/// - dateFormat: 自定义日期格式(如:yyyy-MM-dd HH:mm:ss)
|
||
/// - Returns: Date
|
||
static func getDate(timeString: String, dateFormat: String) -> Date {
|
||
let dateformatter = DateFormatter()
|
||
dateformatter.dateFormat = dateFormat
|
||
let date = dateformatter.date(from: timeString) ?? Date()
|
||
return date
|
||
}
|
||
|
||
/// 日期转时间戳
|
||
/// - Parameters:
|
||
/// - timeString: 日期字符串
|
||
/// - dateFormat: 自定义日期格式(如:yyyy-MM-dd HH:mm:ss)
|
||
/// - Returns: 时间戳
|
||
static func getTimeStamp(timeString: String, dateFormat: String) -> Int {
|
||
let dateformatter = DateFormatter()
|
||
dateformatter.dateFormat = dateFormat
|
||
let date = self.getDate(timeString: timeString, dateFormat: dateFormat)
|
||
return Int(date.timeIntervalSince1970)
|
||
}
|
||
|
||
|
||
/// 时间戳转换时间date
|
||
/// - Parameters:
|
||
/// - timeStamp: 时间戳
|
||
/// - Returns: date
|
||
static func getDateWith(timeStamp: Int) -> Date {
|
||
let date = Date(timeIntervalSince1970: TimeInterval.init(timeStamp))
|
||
return date
|
||
}
|
||
|
||
|
||
/// 获取(年,月,日,时,分,秒)
|
||
/// - Returns: (年,月,日,时,分,秒)
|
||
func getTime() -> (String, String, String, String, String, String) {
|
||
let dateformatter = DateFormatter()
|
||
dateformatter.dateFormat = "yyyy"
|
||
let y = dateformatter.string(from: self)
|
||
dateformatter.dateFormat = "MM"
|
||
let mo = dateformatter.string(from: self)
|
||
dateformatter.dateFormat = "dd"
|
||
let d = dateformatter.string(from: self)
|
||
dateformatter.dateFormat = "HH"
|
||
let h = dateformatter.string(from: self)
|
||
dateformatter.dateFormat = "mm"
|
||
let m = dateformatter.string(from: self)
|
||
dateformatter.dateFormat = "ss"
|
||
let s = dateformatter.string(from: self)
|
||
|
||
return (y, mo, d, h, m, s)
|
||
}
|
||
|
||
|
||
/// 获取时间字符串
|
||
/// - Parameter dateFormat: 自定义日期格式(如:yyyy-MM-dd HH:mm:ss)
|
||
/// - Returns: 时间字符串
|
||
func getStringTime(dateFormat: String) -> String {
|
||
let dateformatter = DateFormatter()
|
||
dateformatter.dateFormat = dateFormat
|
||
return dateformatter.string(from: self)
|
||
}
|
||
private enum ConstellationType:String {
|
||
case 白羊座, 金牛座, 双子座, 巨蟹座, 狮子座, 处女座,
|
||
天秤座, 天蝎座, 射手座, 摩羯座, 水瓶座, 双鱼座
|
||
}
|
||
|
||
private static let constellationDict:[ConstellationType :String] = [.白羊座: "3.21-4.19",
|
||
.金牛座: "4.20-5.20",
|
||
.双子座: "5.21-6.21",
|
||
.巨蟹座: "6.22-7.22",
|
||
.狮子座: "7.23-8.22",
|
||
.处女座: "8.23-9.22",
|
||
.天秤座: "9.23-10.23",
|
||
.天蝎座: "10.24-11.22",
|
||
.射手座: "11.23-12.21",
|
||
.摩羯座: "12.22-1.19",
|
||
.水瓶座: "1.20-2.18",
|
||
.双鱼座: "2.19-3.20"]
|
||
|
||
/// 日期 -> 星座
|
||
/// - parameter date: 日期
|
||
/// - returns: 星座名称
|
||
public static func getCalculateWithDate(date: Date) -> String? {
|
||
|
||
let timeInterval = date.timeIntervalSince1970
|
||
let OneDay:Double = 86400
|
||
|
||
let currConstellation = constellationDict.filter {
|
||
|
||
let timeRange = getTimeRange(date: date, timeRange: $1)
|
||
let startTime = timeRange.0
|
||
let endTime = timeRange.1 + OneDay
|
||
|
||
return timeInterval > startTime && timeInterval < endTime
|
||
} // 摩羯座这家伙跨年必定不满足
|
||
|
||
return currConstellation.first?.key.rawValue ?? "摩羯座"
|
||
}
|
||
|
||
/// f.获取开始、结束时间
|
||
private static func getTimeRange(date:Date, timeRange: String) -> (TimeInterval, TimeInterval) {
|
||
|
||
/// f.1 获取当前年份
|
||
func getCurrYear(date:Date) -> String {
|
||
|
||
let dm = DateFormatter()
|
||
dm.dateFormat = "yyyy."
|
||
let currYear = dm.string(from: date)
|
||
return currYear
|
||
}
|
||
|
||
/// f.2 日期转换当前时间戳
|
||
func toTimeInterval(dateStr: String) -> TimeInterval? {
|
||
|
||
let dm = DateFormatter()
|
||
dm.dateFormat = "yyyy.MM.dd"
|
||
|
||
let date = dm.date(from: dateStr)
|
||
let interval = date?.timeIntervalSince1970
|
||
|
||
return interval
|
||
}
|
||
|
||
let timeStrArr = timeRange.components(separatedBy: "-")
|
||
let dateYear = getCurrYear(date: date)
|
||
let startTimeStr = dateYear + timeStrArr.first!
|
||
let endTimeStr = dateYear + timeStrArr.last!
|
||
|
||
let startTime = toTimeInterval(dateStr: startTimeStr)!
|
||
let endTime = toTimeInterval(dateStr: endTimeStr)!
|
||
|
||
return (startTime, endTime)
|
||
}
|
||
}
|