আপনার প্রয়োজন অনুসারে সুইফট 3 এর সাহায্যে আপনি আপনার সমস্যা সমাধানের জন্য নিম্নলিখিত দুটি উপায়ের একটি বেছে নিতে পারেন।
1. ব্যবহারকারীর কাছে দুটি তারিখের মধ্যে পার্থক্য প্রদর্শন করুন
আপনি DateComponentsFormatter
আপনার অ্যাপ্লিকেশনটির ইন্টারফেসের জন্য স্ট্রিং তৈরি করতে একটি ব্যবহার করতে পারেন । নিম্নলিখিত ঘোষণা সহ DateComponentsFormatter
একটি maximumUnitCount
সম্পত্তি আছে :
var maximumUnitCount: Int { get set }
ফলাফলটি স্ট্রিংয়ে প্রদর্শিত ইউনিটগুলির সংখ্যা সীমাবদ্ধ করতে এই সম্পত্তিটি ব্যবহার করুন। উদাহরণস্বরূপ, এই সম্পত্তিটি "1h 10m, 30s" এর পরিবর্তে 2 এ সেট করা হলেও ফলাফলটি স্ট্রিংটি "1h 10m" হবে। আপনি যখন জায়গার জন্য সীমাবদ্ধ থাকেন বা নিকটতম বৃহত্তর ইউনিটটিতে মানগুলি পেতে চান তখন এই সম্পত্তিটি ব্যবহার করুন।
maximumUnitCount
এর মান সেট করে 1
, আপনি কেবলমাত্র একটি DateComponentsFormatter
ইউনিটে (বছর, মাস, দিন, ঘন্টা বা মিনিট) পার্থক্য প্রদর্শনের গ্যারান্টিযুক্ত ।
নীচের খেলার মাঠের কোডটি দেখায় যে কীভাবে দুটি তারিখের মধ্যে পার্থক্য প্রদর্শিত হবে:
import Foundation
let oldDate = Date(timeIntervalSinceReferenceDate: -16200)
let newDate = Date(timeIntervalSinceReferenceDate: 0)
let dateComponentsFormatter = DateComponentsFormatter()
dateComponentsFormatter.allowedUnits = [NSCalendar.Unit.year, .month, .day, .hour, .minute]
dateComponentsFormatter.maximumUnitCount = 1
dateComponentsFormatter.unitsStyle = DateComponentsFormatter.UnitsStyle.full
let timeDifference = dateComponentsFormatter.string(from: oldDate, to: newDate)
print(String(reflecting: timeDifference)) // prints Optional("5 hours")
মনে রাখবেন যে DateComponentsFormatter
ফলাফলটি চারদিকে রয়েছে। সুতরাং, 4 ঘন্টা এবং 30 মিনিটের পার্থক্যটি 5 ঘন্টা হিসাবে প্রদর্শিত হবে ।
আপনার যদি এই অপারেশনটি পুনরাবৃত্তি করতে হয় তবে আপনি নিজের কোডটি রিফেক্টর করতে পারেন:
import Foundation
struct Formatters {
static let dateComponentsFormatter: DateComponentsFormatter = {
let dateComponentsFormatter = DateComponentsFormatter()
dateComponentsFormatter.allowedUnits = [NSCalendar.Unit.year, .month, .day, .hour, .minute]
dateComponentsFormatter.maximumUnitCount = 1
dateComponentsFormatter.unitsStyle = DateComponentsFormatter.UnitsStyle.full
return dateComponentsFormatter
}()
}
extension Date {
func offset(from: Date) -> String? {
return Formatters.dateComponentsFormatter.string(from: oldDate, to: self)
}
}
let oldDate = Date(timeIntervalSinceReferenceDate: -16200)
let newDate = Date(timeIntervalSinceReferenceDate: 0)
let timeDifference = newDate.offset(from: oldDate)
print(String(reflecting: timeDifference)) // prints Optional("5 hours")
2. বিন্যাস ছাড়াই দুটি তারিখের মধ্যে পার্থক্য পান
যদি আপনার ব্যবহারকারীর কাছে দুটি তারিখের মধ্যে পার্থক্য বিন্যাসের সাথে প্রদর্শন করার প্রয়োজন না হয় তবে আপনি এটি ব্যবহার করতে পারেন Calendar
। Calendar
একটি পদ্ধতি dateComponents(_:from:to:)
রয়েছে যার নিম্নলিখিত ঘোষণা রয়েছে:
func dateComponents(_ components: Set<Calendar.Component>, from start: Date, to end: Date) -> DateComponents
দুটি তারিখের মধ্যে পার্থক্য প্রদান করে।
নীচের প্লেগ্রাউন্ড কোডটি dateComponents(_:from:to:)
দেখায় যে মাত্র এক ধরণের Calendar.Component
(বছর, মাস, দিন, ঘন্টা বা মিনিট) পার্থক্যটি ফিরিয়ে কীভাবে দুটি তারিখের মধ্যে পার্থক্যটি পুনরুদ্ধার করতে হয় ।
import Foundation
let oldDate = Date(timeIntervalSinceReferenceDate: -16200)
let newDate = Date(timeIntervalSinceReferenceDate: 0)
let descendingOrderedComponents = [Calendar.Component.year, .month, .day, .hour, .minute]
let dateComponents = Calendar.current.dateComponents(Set(descendingOrderedComponents), from: oldDate, to: newDate)
let arrayOfTuples = descendingOrderedComponents.map { ($0, dateComponents.value(for: $0)) }
for (component, value) in arrayOfTuples {
if let value = value, value > 0 {
print(component, value) // prints hour 4
break
}
}
আপনার যদি এই অপারেশনটি পুনরাবৃত্তি করতে হয় তবে আপনি নিজের কোডটি রিফেক্টর করতে পারেন:
import Foundation
extension Date {
func offset(from: Date) -> (Calendar.Component, Int)? {
let descendingOrderedComponents = [Calendar.Component.year, .month, .day, .hour, .minute]
let dateComponents = Calendar.current.dateComponents(Set(descendingOrderedComponents), from: from, to: self)
let arrayOfTuples = descendingOrderedComponents.map { ($0, dateComponents.value(for: $0)) }
for (component, value) in arrayOfTuples {
if let value = value, value > 0 {
return (component, value)
}
}
return nil
}
}
let oldDate = Date(timeIntervalSinceReferenceDate: -16200)
let newDate = Date(timeIntervalSinceReferenceDate: 0)
if let (component, value) = newDate.offset(from: oldDate) {
print(component, value) // prints hour 4
}
NSDateComponentsFormatter
। এটি খুব কনফিগারযোগ্য, আপনাকে যথাযথভাবে সংখ্যক ফলাফল পেতে দেয় (উদাঃ.maximumUnitCount = 1
)।