Saya sedang mengerjakan suatu aplikasi yang membutuhkan pengecekan tanggal jatuh tempo untuk pekerjaan rumah. Saya ingin tahu apakah tanggal jatuh tempo adalah dalam minggu depan, dan apakah itu kemudian melakukan suatu tindakan.
Sebagian besar dokumentasi yang bisa saya temukan ada di Objective-C dan saya tidak tahu bagaimana melakukannya di Swift. Terima kasih untuk bantuannya!!
153
Date
kelas. Itu dijembataniNSDate
, tetapi disebutDate
.Jawaban:
Saya suka menggunakan ekstensi untuk membuat kode lebih mudah dibaca. Berikut adalah beberapa ekstensi NSDate yang dapat membantu membersihkan kode Anda dan membuatnya mudah dimengerti. Saya menempatkan ini dalam file sharedCode.swift:
Sekarang jika Anda dapat melakukan sesuatu seperti ini:
sumber
return self.compare(dateToCompare) == NSComparisonResult.OrderedDescending
NSDateComponents
ada. Ada banyak kasus tepi yang tidak menjadi pegangan benar dan tidak masuk akal untuk tidak menambahkan kesesuaian denganComparable
keNSDate
. Saya akan merekomendasikan menggunakan solusi John .date1 < date2
Jika Anda ingin mendukung
==
,<
,>
,<=
, atau>=
untukNSDate
s, Anda hanya perlu untuk menyatakan suatu tempat ini:sumber
Comparable
adalah turunan dariEquatable
protokol sehingga Anda tidak perlu menyatakan kesesuaian dengan keduanya.==
,<
,>
, dll, Anda akan mendapatkan hasil dari perbandingan alamat mereka di memori, tidak perbandingan nilai aktual mereka. Di Swift, mereka masih diperlakukan sebagai referensi jadi saya pikir pilihannya adalah (1) tetap menggunakan perbandingan-pointer-seperti yang ada di ObjC, atau (2) menghilangkan kebingungan dengan tidak menyediakan implementasi untuk perbandingan.Array.maxElement()
, dll. Kemudian secara otomatis tersedia dari array NSDates.Ini adalah bagaimana Anda membandingkan dua NSDates di Swift, saya baru saja mengujinya di taman bermain Xcode:
Jadi untuk memeriksa apakah suatu kencan
dueDate
dalam seminggu dari sekarang:sumber
Saya selalu melakukannya dalam satu baris:
Masih bisa dibaca di
if
bloksumber
Di Swift3,
Date
struct diFoundation
sekarang mengimplementasikanComparable
protokol. Jadi,NSDate
pendekatan Swift2 sebelumnya digantikan oleh Swift3Date
.Catatan ...
Dalam Swift3,
Date
adalahstruct
, itu artinyavalue type
.NSDate
ituclass
, itureference type
.sumber
sumber
Jika Anda ingin membandingkan tanggal dengan rincian (hanya pada hari atau tahun yang sama, dll) dengan cepat 3.
Untuk perbandingan kalender lainnya, ubah .hari menjadi;
.tahun .bulan .hari .jam .menit .detik
sumber
Swift sudah mengimplementasikan perbandingan tanggal, cukup gunakan date1> date2 dan seterusnya.
sumber
di Swift 3, Date Sebanding sehingga kami dapat langsung membandingkan tanggal seperti
atau sebagai alternatif
cara pembuatan yang lebih baik
extension
pada Tanggalpemakaian
let isGreater = date1.isGreater(than: date2)
sumber
Fungsi ini berfungsi untuk saya untuk membandingkan apakah satu tanggal (startDate) adalah setelah tanggal akhir di mana keduanya didefinisikan sebagai variabel NSDate:
sumber
implementasi di
Swift
sumber
sumber
dateAdded adalah variabel NSDate di objek saya
sumber
Kami memiliki skenario untuk memeriksa waktu saat ini terletak dengan dua kali (dua tanggal). Misalnya, saya ingin memeriksa waktu saat ini antara waktu pembukaan dan waktu penutupan klinik (Rumah Sakit).
Gunakan Kode sederhana.
sumber
Untuk swift 3, Anda dapat menggunakan fungsi di bawah ini untuk membandingkan antara dua tanggal.
toGranularity dapat diubah sesuai dengan kendala yang Anda inginkan untuk menerapkan perbandingan Anda.
sumber
Untuk memperluas pada SashaZ
Swift iOS 8 dan lebih tinggi Saat Anda membutuhkan lebih dari sekadar perbandingan tanggal yang lebih besar atau lebih kecil. Misalnya hari itu sama atau hari sebelumnya, ...
Catatan: Jangan pernah lupa zona waktu. Zona waktu kalender memiliki default, tetapi jika Anda tidak suka default, Anda harus mengatur sendiri zona waktu. Untuk mengetahui hari apa sekarang, Anda perlu tahu di zona waktu yang Anda tanyakan.
Gunakan seperti ini:
Dari contoh yang lebih kompleks. Temukan dan filter semua tanggal dalam sebuah array, yang berasal dari hari yang sama dengan "findThisDay":
sumber