[英]Get last week and last month start and end dates
Get last week and last month start and end dates. 获取上周和上个月的开始和结束日期。
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
let date = Date()
//Today date
let dateString = dateFormatter.string(from: date)
print(dateString)
//Yesterday
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: date)!
print(dateFormatter.string(from: yesterday))
//This week
let startWeek = date.startOfWeek
let endWeek = date.endOfWeek
print(startWeek ?? "not found start date")
print(endWeek ?? "not found end date")
extension Date {//Get this week starts from monday
var startOfWeek: Date? {
let gregorian = Calendar(identifier: .gregorian)
guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
return gregorian.date(byAdding: .day, value: 2, to: sunday)
}
var endOfWeek: Date? {
let gregorian = Calendar(identifier: .gregorian)
guard let sunday = gregorian.date(from: gregorian.dateComponents([.yearForWeekOfYear, .weekOfYear], from: self)) else { return nil }
return gregorian.date(byAdding: .day, value: 8, to: sunday)
}
}
//This month
dateFormatter.dateFormat = "MM-yyyy"
let nameOfMonth = dateFormatter.string(from: date)
print(nameOfMonth)
//Last 30days
let last30Days = Calendar.current.date(byAdding: .day, value: -30, to: date)!
print(dateFormatter.string(from: last30Days))
I need last week start date and end date[Start day is Monday and end day is sunday] 我需要上周的开始日期和结束日期[开始日期是星期一,结束日期是星期日]
And last month start date and end date 以及上个月的开始日期和结束日期
You should use this function to calculate the range of dates, it takes a target date, a calendar component and two inout parameters that will be populated with the date and time interval calculated. 您应该使用此函数来计算日期范围,它需要一个目标日期,一个日历组件和两个inout参数,这些参数将使用计算出的日期和时间间隔进行填充。
func dateInterval(of component: Calendar.Component, start: inout Date, interval: inout TimeInterval, for date: Date) -> Bool
Here's an example: 这是一个例子:
let calendar = Calendar.current
let today = Date()
let lastWeek = calendar.date(byAdding: .weekOfYear, value: -1, to: today)
let lastMonth = calendar.date(byAdding: .month, value: -1, to: today)
if let lastWeek = lastWeek {
var startOfLastWeek = Date()
var interval = TimeInterval(0)
calendar.dateInterval(of: .weekOfYear, start: &startOfLastWeek, interval: &interval, for: lastWeek)
let endOfLastWeek = startOfLastWeek.addingTimeInterval(interval)
print(startOfLastWeek)
print(endOfLastWeek)
}
if let lastMonth = lastMonth {
var startOfLastMonth = Date()
var interval = TimeInterval(0)
calendar.dateInterval(of: .month, start: &startOfLastMonth, interval: &interval, for: lastMonth)
let endOfLastMonth = startOfLastMonth.addingTimeInterval(interval)
print(startOfLastMonth)
print(endOfLastMonth)
}
If you need to change the first day of the week you can change it in your calendar like this: 如果需要更改一周的第一天,可以在日历中进行如下更改:
var calendar = Calendar.current
calendar.firstWeekday = 2 // 1 is Sunday, 2 is Monday
Remember that when you print the date print(startOfLastMonth)
, it is displayed in UTC, if you want the date printed in your timezone you will have to use a DateFormatter . 请记住,当您打印日期print(startOfLastMonth)
,它以UTC显示,如果您希望在时区中打印日期,则必须使用DateFormatter 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.