Saya mencoba untuk mendapatkan perbedaan antara tanggal saat ini sebagai NSDate()
dan tanggal dari PHP time();
panggilan misalnya: NSDate(timeIntervalSinceReferenceDate: 1417147270)
. Bagaimana cara saya mendapatkan perbedaan waktu antara dua tanggal. Saya ingin memiliki fungsi yang membandingkan dua tanggal dan if(seconds > 60)
kemudian mengembalikan menit, if(minutes > 60)
jam if(hours > 24)
kembali dan hari kembali dan seterusnya.
Bagaimana saya harus melakukan ini?
EDIT: Jawaban yang diterima saat ini telah melakukan apa yang ingin saya lakukan. Saya merekomendasikannya untuk penggunaan mudah untuk mendapatkan waktu antara dua tanggal dalam bentuk yang time()
menggunakan fungsi PHP . Jika Anda tidak terlalu terbiasa dengan PHP, itu waktunya dalam hitungan detik mulai 1 Januari 1970. Ini bermanfaat untuk backend di PHP. Jika mungkin Anda menggunakan backend seperti NodeJS, Anda mungkin ingin mempertimbangkan beberapa opsi lain yang akan Anda temukan di bawah.
NSDateComponentsFormatter
. Ini sangat dapat dikonfigurasi, memungkinkan Anda untuk mendapatkan hasil singkat yang tepat (misalnya.maximumUnitCount = 1
).Jawaban:
Xcode 8.3 • Swift 3.1 atau lebih baru
Anda dapat menggunakan Kalender untuk membantu Anda membuat ekstensi untuk melakukan perhitungan tanggal sebagai berikut:
Menggunakan Formatter Komponen Tanggal
sumber
.CalendarUnitSecond
memberikan kesalahan'NSCalendarUnit.Type' does not have a member named 'CalendarUnitSecond'
, apakah Anda tahu cara mengatasinya?NSCalendarUnit
, diimplementasikan sebagaireturn Calendar.current().components(unit, from: date, to: self, options: [])?. valueForComponent(unit)
(pada iOS> 8).DateComponentsFormatter
SO jauh lebih baik daripada melakukannya jauh, itu benar-benar harus di atas jawaban.Jika seseorang perlu menampilkan semua unit waktu misalnya "jam menit detik" bukan hanya "jam". Katakanlah perbedaan waktu antara dua tanggal adalah 1 jam 59 menit 20 detik. Fungsi ini akan menampilkan "1j 59m 20d".
Ini kode Objective-C saya:
Dalam Swift 3+:
sumber
Anda bertanya:
Saya berasumsi bahwa Anda sedang mencoba untuk membangun representasi string dari waktu yang telah berlalu antara dua tanggal. Daripada menulis kode Anda sendiri untuk melakukan itu, Apple sudah memiliki kelas yang dirancang untuk melakukan hal itu. Yaitu, gunakan
DateComponentsFormatter
, setelallowedUnits
ke nilai apa pun yang masuk akal untuk aplikasi Anda, setelunitsStyle
ke apa pun yang Anda inginkan (mis.full
), Lalu panggilstring(from:to:)
.Misalnya dalam Swift 3:
Ini juga akan melokalisasi string yang sesuai untuk perangkat yang dimaksud.
Atau, dalam Swift 2.3:
Jika Anda mencari nilai numerik yang sebenarnya, gunakan saja
dateComponents
. Misalnya dalam Swift 3:Atau, dalam Swift 2.3:
sumber
gabungan Extension + DateComponentsFormatter dari jawaban @ leo-dabus
Xcode 8.3 • Swift 3.1
sumber
sumber
Saya menambahkan versi "lama" ke asnwer Leo Dabus jika Anda ingin memiliki string yang mengatakan sesuatu seperti "2 minggu lalu", bukan hanya "2w" ...
sumber
-> Gunakan ini untuk menemukan jarak waktu antara dua tanggal di Swift (Dengan dua String).
sumber
Kode yang sedikit dimodifikasi untuk Swift 3.0
sumber
Swift 5.1 • iOS 13
Anda dapat menggunakan RelativeDateFormatter yang telah diperkenalkan oleh Apple di iOS 13.
Lihat Cara menampilkan tanggal dan waktu relatif menggunakan RelativeDateTimeFormatter .
sumber
Jika tujuan Anda adalah untuk mendapatkan nomor hari yang tepat antara dua tanggal, Anda dapat mengatasi masalah ini seperti ini:
sumber
Dengan Swift 3, sesuai dengan kebutuhan Anda, Anda dapat memilih salah satu dari dua cara berikut untuk menyelesaikan masalah Anda.
1. Tampilkan perbedaan antara dua tanggal untuk pengguna
Anda dapat menggunakan a
DateComponentsFormatter
untuk membuat string untuk antarmuka aplikasi Anda.DateComponentsFormatter
memilikimaximumUnitCount
properti dengan deklarasi berikut:Dengan menetapkan
maximumUnitCount
nilai ke1
, Anda dijamin untuk menampilkan perbedaan hanya dalam satuDateComponentsFormatter
unit (tahun, bulan, hari, jam atau menit).Kode Playground di bawah ini menunjukkan cara menampilkan perbedaan antara dua tanggal:
Perhatikan bahwa
DateComponentsFormatter
kumpulkan hasilnya. Oleh karena itu, perbedaan 4 jam dan 30 menit akan ditampilkan sebagai 5 jam .Jika Anda perlu mengulangi operasi ini, Anda dapat mengubah kode Anda:
2. Dapatkan perbedaan antara dua tanggal tanpa memformat
Jika Anda tidak perlu menampilkan dengan memformat perbedaan antara dua tanggal ke pengguna, Anda dapat menggunakan
Calendar
.Calendar
memiliki metodedateComponents(_:from:to:)
yang memiliki deklarasi berikut:Kode Playground di bawah ini yang menggunakan
dateComponents(_:from:to:)
menunjukkan cara mengambil perbedaan antara dua tanggal dengan mengembalikan perbedaan hanya dalam satu jenisCalendar.Component
(tahun, bulan, hari, jam atau menit).Jika Anda perlu mengulangi operasi ini, Anda dapat mengubah kode Anda:
sumber
Dalam Swift 2.2
sumber
Tambahan kecil untuk jawaban Leo Dabus untuk menyediakan versi jamak dan lebih dapat dibaca manusia.
Cepat 3
sumber
Ini adalah versi yang lebih pendek: Pada dasarnya saya mencoba untuk mendapatkan perbedaan antara stempel pos waktu dengan yang
Date()
sekarang.sumber
Inilah jawaban saya untuk jawaban Swift 3 di atas. Ini berlaku pada Nov 2016, rilis Xcode adalah 8.2 Beta (8C23). Menggunakan beberapa saran Sagar dan Emin di atas dan terkadang harus membiarkan Xcode melengkapi secara otomatis untuk menyarankan sintaks. Sepertinya sintaks benar-benar berubah ke versi beta ini.
buyDate
Saya dapatkan dari DatePicker:sumber
NSCalendar
di Swift 3. GunakanCalendar
. Jadi ini disederhanakanlet calendar = Calendar.current
. Dan kemudiancomponents
akan terlihat seperti:let components = calendar.dateComponents([.day], from: date1, to: date2)
.Untuk XCode Versi 8.3.3 & Swift 3.0:
sumber
Beberapa tambahan di jose920405 menjawab untuk membuatnya kompatibel dengan Swift 3.0 dan di atasnya
sumber
Gunakan kode ini:
Output adalah: Hasil: 10 tahun 1 bulan dan 18 hari
sumber
Menggunakan:
sumber