NSDate 一年中的第几天(swift)

问题描述 投票:0回答:5

如何用 swift 找到一年中的第几天?有没有一种我没有看到的简单方法,或者我是否必须找到从 1 月 1 日到当前日期的秒数,然后除以一天的秒数?

ios swift nsdate
5个回答
61
投票

这是 如何计算 Objective-C 中特定日期的一年中的某一天? 的答案到 Swift 的翻译。

斯威夫特2:

let date = NSDate() // now
let cal = NSCalendar.currentCalendar()
let day = cal.ordinalityOfUnit(.Day, inUnit: .Year, forDate: date)
print(day)

斯威夫特3:

let date = Date() // now
let cal = Calendar.current
let day = cal.ordinality(of: .day, in: .year, for: date)
print(day)

这给出了

1
代表一年中的第一天,
56 = 31 + 25
代表今天(2 月 25 日)。

...或者我必须找到从 1 月 1 日到当前日期的秒数 除以一天的秒数

这是一个错误的做法,因为一天没有固定的时间 秒数(从夏令时转换到夏令时)。


16
投票

斯威夫特3

extension Date {
    var dayOfYear: Int {
        return Calendar.current.ordinality(of: .day, in: .year, for: self)!
    }
}

使用类似

Date().dayOfYear

4
投票

一点也不!!!您所要做的就是使用 NSCalendar 来帮助您进行日历计算,如下所示:

let firstDayOfTheYear  = NSCalendar.currentCalendar().dateWithEra(1, year: NSCalendar.currentCalendar().component(.CalendarUnitYear, fromDate: NSDate()), month: 1, day: 1, hour: 0, minute: 0, second: 0, nanosecond: 0)!   // "Jan 1, 2015, 12:00 AM"

let daysFromJanFirst = NSCalendar.currentCalendar().components(.CalendarUnitDay, fromDate: firstDayOfTheYear, toDate: NSDate(), options: nil).day   // 55

let secondsFromJanFirst = NSCalendar.currentCalendar().components(.CalendarUnitSecond, fromDate: firstDayOfTheYear, toDate: NSDate(), options: nil).second   // 4,770,357

0
投票

您可以这样查找自约会以来的天数:

let date = NSDate() // your date

let days = cal.ordinalityOfUnit(.CalendarUnitDay, inUnit: .CalendarUnitYear, forDate: date)

println(days)

0
投票

这在 Swift 5 中仍然有效,但是当您将其包含在代码中时。像这样

let date = Date() 
            //now
            let cal = Calendar.current
            //using calendar formatting
            let day = cal.ordinality(of: .day, in: .year, for: date)
            //prints the day of the year we are in
            
            Text(String(countDown - (day ?? 0)))
                .padding()

这是您需要的代码块:

let date = Date()
let cal = Calendar.current
let day = cal.ordinality(of: .day, in: .year, for: date)
© www.soinside.com 2019 - 2024. All rights reserved.