Làm cách nào để tạo đối tượng NSDate
với ngày tùy chỉnh khác với ngày hiện tại? Ví dụ tôi muốn tạo một var ngày hôm qua hoặc 2 ngày trước.NSDate của ngày hôm qua
Trả lời
let twoDaysAgo = NSDate(timeIntervalSinceNow: -2*24*60*60)
Bạn nên sử dụng NSCalendar
để tính ngày. Ví dụ, trong Swift 3 ngày hai ngày trước hôm nay là:
let calendar = Calendar.current
let twoDaysAgo = calendar.date(byAdding: .day, value: -2, to: Date())
Hoặc trong Swift 2:
let calendar = NSCalendar.currentCalendar()
let twoDaysAgo = calendar.dateByAddingUnit(.Day, value: -2, toDate: NSDate(), options: [])
Hoặc để có được đầu tiên của tháng, bạn có thể lấy ngày, tháng và năm từ ngày hiện tại, điều chỉnh ngày đến ngày đầu tiên của tháng và sau đó tạo đối tượng ngày mới. Trong Swift 3:
var components = calendar.dateComponents([.year, .month, .day], from: Date())
components.day = 1
let firstOfMonth = calendar.date(from: components)]
Hoặc trong Swift 2:
let components = calendar.components([.Year, .Month, .Day], fromDate: NSDate())
components.day = 1
let firstOfMonth = calendar.dateFromComponents(components)
Có rất nhiều chức năng hữu ích trong lớp NSCalendar
/Calendar
, vì vậy bạn nên điều tra hơn nữa. Xem NSCalendar class reference để biết thêm thông tin.
Nhưng tôi khuyên bạn không nên thực hiện bất kỳ điều chỉnh thủ công nào của các đối tượng ngày bằng cách điều chỉnh nó theo một khoảng thời gian là bội số của mỗi giây (ví dụ: 24 * 60 * 60). Kỹ thuật đó hoạt động tốt nếu bạn chỉ cần thêm một khoảng thời gian, nhưng để tính toán ngày, bạn thực sự muốn sử dụng đối tượng lịch, để tránh các vấn đề xuất phát từ tiết kiệm ban ngày và tương tự.
DayCalendarUnit không được chấp nhận trong OS X v10.10. –
bạn nên thay đổi nó thành .CalendarUnitDay –
để haiDaysAgo = NSCalendar.currentCalendar(). DateByAddingUnit (.CalendarUnitDay, giá trị: -2, toDate: NSDate(), tùy chọn: nil) –
Vui lòng thử mã bên dưới. Tôi nghĩ nó đơn giản.
let today = NSDate()
let tomorrow = today.dateByAddingTimeInterval(24 * 60 * 60)
let yesterday = today.dateByAddingTimeInterval(-24 * 60 * 60)
Chúc mừng !!!
Mã cho Swift 2,0
static func yesterDay() -> NSDate {
let today: NSDate = NSDate()
let daysToAdd:Int = -1
// Set up date components
let dateComponents: NSDateComponents = NSDateComponents()
dateComponents.day = daysToAdd
// Create a calendar
let gregorianCalendar: NSCalendar = NSCalendar(identifier: NSCalendarIdentifierGregorian)!
let yesterDayDate: NSDate = gregorianCalendar.dateByAddingComponents(dateComponents, toDate: today, options:NSCalendarOptions(rawValue: 0))!
return yesterDayDate
}
Câu trả lời của Rob hoạt động tuyệt vời. Nếu bạn đang sử dụng nhiều loại tính toán đó, bạn thậm chí có thể đóng gói logic đó và tạo các tiện ích mở rộng tùy chỉnh của riêng bạn và trình bao bọc.
Điều đó nói rằng tôi cũng sẽ đề nghị xem qua thư viện tuyệt vời này có tên là SwiftDate. Ngay cả khi bạn không sử dụng nó, README đáng đọc. Nó giới thiệu định nghĩa hoặc Region
có thể cực kỳ hữu ích cho một số trường hợp và một số trình khởi tạo tiện dụng.
Một số chất liệu mát mẻ và mẫu:
- Math hoạt động với các ngày:
(1.years - 2.hours + 16.minutes).fromNow()
- thành phần thời gian Soạn:
let dateInUTC = (2015.years | 12.months | 25.days | 20.hours | 10.minutes).inUTCRegion
- Classy:
let date = 5.days.fromNow
,let date = 4.hours.ago
- Với Regions:
let date = (6.hours + 2.minutes).fromNow(region: inRome)
- Và một nhiều hơn ...
Hy vọng điều đó sẽ hữu ích.
Cảm ơn bạn đã chỉ cho tôi SwiftDate! – penner
Đây là một giải pháp cho Swift 4 - XCode 9
let yesterday = Calendar.current.date(byAdding: .day, value: -1, to: Date())
hãy thay thế 'NSCalendar' bằng' Lịch ' – zero3nna
- 1. Tìm hiểu xem NSDate là hôm nay, hôm qua, ngày mai
- 2. Làm thế nào tôi có thể nhận được NSDate của ngày hôm qua
- 3. ngày PHP hôm qua
- 4. nhận NSDate ngay hôm nay, hôm qua, tuần này, tuần trước, tháng này, tháng trước ... biến
- 5. Có được ngày hôm qua với NSDate trong mục tiêu-c
- 6. MySQL chọn ngày hôm qua
- 7. MySQL chọn ngày hôm qua
- 8. Kiểm tra xem ngày được chỉ định là hôm nay, hôm qua hay một ngày trong tương lai
- 9. Tính ngày hôm qua trong JavaScript
- 10. elasticsearch có được ngày hôm qua
- 11. Nhận dấu thời gian của ngày hôm nay và hôm qua trong php
- 12. php nhận ngày hôm nay vào ngày mai và ngày hôm sau nhưng bỏ qua các ngày cuối tuần
- 13. Mục tiêu C - nhận ngày hôm sau từ hôm nay (ngày mai)
- 14. NSDate cho ngày đầu tiên của tháng
- 15. Tên ngày từ NSDate?
- 16. ngày Thêm vào NSDate
- 17. Thay đổi năm, tháng và ngày của đối tượng NSDate
- 18. Http ngày để NSDate
- 19. Nhận ngày hôm qua bằng cách sử dụng Date
- 20. Thay thế đối tượng hẹn hò với “hôm nay” và “ngày hôm qua” chuỗi trong iphone
- 21. Làm cách nào để có được ngày hôm qua?
- 22. Java tính toán ngày hôm qua từ hôm nay sẽ đi vào tương lai
- 23. Làm cách nào để lấy dữ liệu ngày hôm nay/ngày hôm qua từ cơ sở dữ liệu MySQL?
- 24. Ngày NSDate trong năm (nhanh)
- 25. NSDate, so sánh hai ngày
- 26. JavaScript, lấy ngày vào ngày hôm sau
- 27. so sánh ngày jpql ngày hôm nay
- 28. giữa java.time.LocalTime (ngày hôm sau)
- 29. NSDateComponents của một NSDate
- 30. Bắt ngày hôm qua - Phương thức getDate() từ loại Ngày không được chấp nhận
Hội chợ đủ, đặc biệt đối với khoảng thời gian phức tạp hơn ngày. – microtherion
Giải pháp này không tính đến DST. – Andriy
@Andriy, true, như @Rob đã chỉ ra trong một nhận xét kể từ khi xóa. Tuy nhiên, nó phụ thuộc vào những gì bạn cần 'NSDate' cho. Đôi khi một cái gì đó đơn giản như trên sẽ làm, và đôi khi giải pháp dựa trên 'NSCalendar' không hoàn toàn đúng:" Hai ngày trước "có thể có hoặc không có nghĩa là" thời gian đồng hồ chính xác vào ngày hôm trước ". – microtherion