Jawaban:
Dengan kelas Date (dan DateTime) yang dapat Anda lakukan (end_date - start_date).to_i
untuk mendapatkan perbedaan jumlah hari.
Time
objek memang kembali beberapa detik.
Time
objek, bukan Date
objek. Mungkin Anda dapat memperbarui penamaan dalam komentar Anda untuk mencerminkan bahwa mereka bukan tanggal?
Dengan asumsi itu end_date
dan start_date
keduanya adalah kelas ActiveSupport::TimeWithZone
di Rails, maka Anda dapat menggunakan:
(end_date.to_date - start_date.to_date).to_i
(Time.zone.now.to_date - 23.hours.ago.to_date).to_i
, ia memberi 1 dan seharusnya 0
Time.zone.now.to_date
mengembalikan "Rab, 15 Nov 2017", sementara 23.hours.ago.to_date
mengembalikan "Sel, 14 Nov 2017". Perbedaan dalam jumlah hari adalah dan harus 1 kecuali Anda menjalankan kode Anda pada jam sebelum tengah malam.
Rails memiliki beberapa bantuan bawaan yang mungkin bisa menyelesaikan ini untuk Anda. Satu hal yang perlu diingat adalah bahwa ini adalah bagian dari Actionview Helper, sehingga mereka tidak akan tersedia langsung dari konsol.
Coba ini
<% start_time = "2012-03-02 14:46:21 +0100" %>
<% end_time = "2012-04-02 14:46:21 +0200" %>
<%= distance_of_time_in_words(start_time, end_time) %>
"about 1 month"
Saya terus mendapatkan hasil dalam hitungan detik, jadi ini berhasil bagi saya:
(Time.now - self.created_at) / 86400
1.day
tidak ruby
seperti yang diminta OP (dalam tag). Ini Rails
atau lebih spesifik active support
meskipun created_at
pada dasarnya adalah Model
metode untuk Rails
itu ..
untuk mendapatkan jumlah hari dalam rentang waktu (hanya hitungan semua hari)
(start_date..end_date).count
(start_date..end_date).to_a.size
#=> 32
untuk mendapatkan jumlah hari antara 2 tanggal
(start_date...end_date).count
(start_date...end_date).to_a.size
#=> 31
Tidak satu pun dari jawaban sebelumnya (hingga tanggal ini) yang memberikan perbedaan yang benar dalam hari antara dua tanggal.
Salah satu yang paling dekat adalah dengan obligasi itu . Jawaban lengkap akan dikonversi to_i
dan kemudian bagi:
(Time.now.to_i - 23.hours.ago.to_i) / 86400
>> 0
(Time.now.to_i - 25.hours.ago.to_i) / 86400
>> 1
(Time.now.to_i - 1.day.ago.to_i) / 86400
>> 1
Dalam contoh spesifik pertanyaan, seseorang tidak boleh menguraikan Date
jika waktu berlalu relevan. Gunakan Time.parse
sebagai gantinya.
Untuk memiliki jumlah hari penuh antara dua tanggal ( DateTime
objek):
((end_at - start_at).to_f / 1.day).floor
def business_days_between(date1, date2)
business_days = 0
date = date2
while date > date1
business_days = business_days + 1 unless date.saturday? or date.sunday?
date = date - 1.day
end
business_days
end