- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开展一个项目,我需要本周的日期。我目前正在使用此函数来获取当前日期。
func getDay() -> String {
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "dd.MM.yyyy"
let result = formatter.string(from: date)
return result
}
它可以很好地为我提供一个约会,但我不知道如何获得本周的所有 7 个日期。如果有人可以提供帮助,我们将不胜感激。
最佳答案
您可以获得今天的yearForWeekOfYear 和weekOfYear 日历组件并从中构造一个新日期。它将为您提供一周的第一天。如果您希望一周从星期一开始,您需要使用 iso8601 日历,如果您希望一周从星期日开始,您可以使用公历。为了避免一些极端情况,您应该使用中午时间进行所有日历计算。并非所有日期都从午夜开始。
let dateComponents = Calendar(identifier: .gregorian).dateComponents([.yearForWeekOfYear, .weekOfYear], from: Date())
let startOfWeek = Calendar(identifier: .gregorian).date(from: dateComponents)!
let startOfWeekNoon = Calendar(identifier: .gregorian).date(bySettingHour: 12, minute: 0, second: 0, of: startOfWeek)!
let weekDays = (0...6).map { Calendar(identifier: .gregorian).date(byAdding: .day, value: $0, to: startOfWeekNoon)! }
weekDays // ["Jun 7, 2020 at 12:00 PM", "Jun 8, 2020 at 12:00 PM", "Jun 9, 2020 at 12:00 PM", "Jun 10, 2020 at 12:00 PM", "Jun 11, 2020 at 12:00 PM", "Jun 12, 2020 at 12:00 PM", "Jun 13, 2020 at 12:00 PM"]
在此基础上,您可以扩展 Date 并创建一些助手:
extension Calendar {
static let iso8601 = Calendar(identifier: .iso8601)
static let gregorian = Calendar(identifier: .gregorian)
}
extension Date {
func byAdding(component: Calendar.Component, value: Int, wrappingComponents: Bool = false, using calendar: Calendar = .current) -> Date? {
calendar.date(byAdding: component, value: value, to: self, wrappingComponents: wrappingComponents)
}
func dateComponents(_ components: Set<Calendar.Component>, using calendar: Calendar = .current) -> DateComponents {
calendar.dateComponents(components, from: self)
}
func startOfWeek(using calendar: Calendar = .current) -> Date {
calendar.date(from: dateComponents([.yearForWeekOfYear, .weekOfYear], using: calendar))!
}
var noon: Date {
Calendar.current.date(bySettingHour: 12, minute: 0, second: 0, of: self)!
}
func daysOfWeek(using calendar: Calendar = .current) -> [Date] {
let startOfWeek = self.startOfWeek(using: calendar).noon
return (0...6).map { startOfWeek.byAdding(component: .day, value: $0, using: calendar)! }
}
}
用法:
// this will give you all days of the current week starting monday
Date().daysOfWeek(using: .iso8601) // ["Jun 8, 2020 at 12:00 PM", "Jun 9, 2020 at 12:00 PM", "Jun 10, 2020 at 12:00 PM", "Jun 11, 2020 at 12:00 PM", "Jun 12, 2020 at 12:00 PM", "Jun 13, 2020 at 12:00 PM", "Jun 14, 2020 at 12:00 PM"]
// this will give you all days of the current week starting sunday
Date().daysOfWeek(using: .gregorian) // ["Jun 7, 2020 at 12:00 PM", "Jun 8, 2020 at 12:00 PM", "Jun 9, 2020 at 12:00 PM", "Jun 10, 2020 at 12:00 PM", "Jun 11, 2020 at 12:00 PM", "Jun 12, 2020 at 12:00 PM", "Jun 13, 2020 at 12:00 PM"]
要将日期转换为固定日期格式,您可以创建一个扩展格式化程序和日期的自定义日期格式化程序:
extension Formatter {
static let ddMMyyyy: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.calendar = Calendar(identifier: .iso8601)
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "dd.MM.yyyy"
return dateFormatter
}()
}
extension Date {
var ddMMyyyy: String { Formatter.ddMMyyyy.string(from: self) }
}
现在您可以使用 KeyPath 简单地映射日期:
Date().daysOfWeek(using: .gregorian).map(\.ddMMyyyy) // ["07.06.2020", "08.06.2020", "09.06.2020", "10.06.2020", "11.06.2020", "12.06.2020", "13.06.2020"]
关于swift - 如何快速创建当前星期日期的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62355030/
我需要将日期截断到一周的开始,在我的例子中是星期天。我如何在 PostgreSQL 中执行此操作?这截断到星期一: date_trunc('week', mydate) 最佳答案 如果您从当前日期中减
我需要形成几个包含日期集的子查询,仅包括两个设置点之间的星期日,例如 01.04.2018 和 30.06.2018 之间。 想到的第一件事是这样的: SELECT '01.04.2018' STAR
我有周数(例如 23),我想获取该周周一和周日的日期。 我假设星期一是一周的第一天(例如,我的脚本中有 SET DATEFIRST 1)。 最佳答案 DECLARE @startweek1 datet
我使用 Bootstrap DateTimePicker 来显示日历,我想从日历中删除一些天(禁用它们) $(function () { $('#datetimepicker1').d
我有以下代码: function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // current
我有以下代码: function myFunction() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // current
我想知道如何以 2013 年 04 星期日的格式将日期和时间最好地插入到数据库表中。我一直在尝试但一直插入为 2013-09-16 。谢谢 这是我的sql代码: $query = "INSERT IN
我正在使用 UILocalNotification 进行报警。我有一个基于工作日(星期日、星期一、星期二、星期三、星期四、星期五、星期六)重复的自定义选项。这么多应用程序都做了这个过程。我尽力了。但我
下面的函数返回图表数据 上述函数返回的输出格式如下 [Object { date=Date, value=112, volume=1469}, Object { date=Date, value
我是一名优秀的程序员,十分优秀!