VDDate 是一个 Swift 库,为 Date 结构体提供了一组强大的扩展,增强了其功能,并使 Swift 中的日期操作更加直观和强大。
Date.init,使用 year, month, day 等组件参数。Date.init,从具有格式的字符串创建。Date.now,如果需要可以被模拟(mock)。 建议使用 Date.now 而不是 Date()。iToday, isTomorrow, isYesterday, iso8601。components,每个组件的变量: day, month, year 等,以及带有 Calendar.Component 的可变下标。start(of: Calendar.Component) -> Date.end(of: Calendar.Component) -> Date.matches(DateComponents) -> Bool.isInSame(Calendar.Component) -> Bool.isCurrent(Calendar.Component) -> BoolisEqual(to: Date, toGranularity: Calendar.Component) -> Bool.number(of: Calendar.Component, from: Date) -> Intnumbers(of components: Set<Calendar.Component>, from: Date) -> DateComponentscomponents(_ components: Set<Calendar.Component>, from: Date) -> DateComponentsrange(of: Calendar.Component, in: Calendar.Component) -> Range<Int> - 组件的范围,例如 range(of: .day, in: .month) 返回类似 1..<32 的值。interval(byAdding: DateComponents) -> DateIntervalinterval(of: Calendar.Component, in: Calendar.Component) -> DateIntervalnumber(of: Calendar.Component) -> Intnumber(of: Calendar.Component, in: Calendar.Component) -> IntDateFormat 结构体。string(DateFormat) -> String 注意: 自 iOS 15.0 起已弃用,推荐使用 formatted(FormatStyle)。string(date: DateFormatter.Style, time: DateFormatter.Style) -> String 注意: 自 iOS 15.0 起已弃用,推荐使用 formatted(FormatStyle)。string(format: RelativeDateFormat<DateFormat>) - 用于将日期格式化为相对于当前(或任何其他)日期的方法。 注意: 自 iOS 15.0 起已弃用,推荐使用 formatted(RelativeDateFormatStyle)formatted(RelativeDateFormatStyle)name(of: Calendar.Component) -> Stringordinality(of: Calendar.Component, in: Calendar.Component) -> Int? 以及每个组件的便捷方法,如 day(in: Calendar.Component)。adding(DateComponents) -> Dateadding(Int, Calendar.Component) -> Datesetting(DateComponents) -> Datesetting(Int, Calendar.Component) -> Datecompare(with: Date, toGranularity: Calendar.Component) -> ComparasionResultnextWeekend(direction: Calendar.SearchDirection) -> DateInterval?next(Calendar.Component, direction: Calendar.SearchDirection) -> Datenearest(DateComponents) -> Date?rounded(Calendar.Component, by: Int) -> Date 按某个组件进行四舍五入的日期,在处理有规律的时间间隔时非常有用。所有方法都接受一个 Calendar 参数,在某些情况下还接受 TimeZone 或 Locale。
我引入了静态变量:Calendar.default, TimeZone.default, 和 Locale.default。
这些变量充当每个相应方法的默认值。 您可以全局或专门针对给定方法修改每个 default 变量。
全局重载 Calendar 参数
Calendar.bootstrap(default: Calendar(identifier: .gregorian))
为特定方法使用 Calendar 参数
date.start(of: .day, calendar: Calendar(identifier: .gregorian))
提示:您可以使用 TaskLocal 为特定任务及其子任务设置默认值。
extension Calendar {
@TaskLocal
static var local: Calendar = .autoupdatingCurrent
}
Calendar.bootstrap(default: .local)
Calendar.$local.withValue(Calendar(identifier: .gregorian)) {
print(Date.now.start(of: .day))
}
DatesCollection 结构体和函数 each(Int, Calendar.Component) -> DatesCollection。DateComponents 之间的 +, -,DateComponents 和 Int 之间的 +, -, /, *,DateComponents 和 Date 之间的 +, -。.day(3)。BinaryInteger 上的扩展,如 2.days,因此现在可以写 date + 2.days。DateComponents 可以通过字典字面量表示,例如 [.day: 2, .month: 1]Calendar.Components 的可变下标。rawValue: [Calendar.Component: Int] - 带有组件的字典。创建一个 Package.swift 文件。
// swift-tools-version:5.7
import PackageDescription
let package = Package(
name: "SomeProject",
dependencies: [
.package(url: "https://github.com/dankinsoid/VDDate.git", from: "0.14.0")
],
targets: [
.target(name: "SomeProject", dependencies: ["VDDate"])
]
)
$ swift build
dankinsoid, voidilov@gmail.com
VDDate 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。