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) -> Bool
isEqual(to: Date, toGranularity: Calendar.Component) -> Bool
.number(of: Calendar.Component, from: Date) -> Int
numbers(of components: Set<Calendar.Component>, from: Date) -> DateComponents
components(_ components: Set<Calendar.Component>, from: Date) -> DateComponents
range(of: Calendar.Component, in: Calendar.Component) -> Range<Int>
- 组件的范围,例如 range(of: .day, in: .month)
返回类似 1..<32
的值。interval(byAdding: DateComponents) -> DateInterval
interval(of: Calendar.Component, in: Calendar.Component) -> DateInterval
number(of: Calendar.Component) -> Int
number(of: Calendar.Component, in: Calendar.Component) -> Int
DateFormat
结构体。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) -> String
ordinality(of: Calendar.Component, in: Calendar.Component) -> Int?
以及每个组件的便捷方法,如 day(in: Calendar.Component)
。adding(DateComponents) -> Date
adding(Int, Calendar.Component) -> Date
setting(DateComponents) -> Date
setting(Int, Calendar.Component) -> Date
compare(with: Date, toGranularity: Calendar.Component) -> ComparasionResult
nextWeekend(direction: Calendar.SearchDirection) -> DateInterval?
next(Calendar.Component, direction: Calendar.SearchDirection) -> Date
nearest(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 文件。