Jawaban:
Dengan kelas Date (dan DateTime) yang dapat Anda lakukan (end_date - start_date).to_iuntuk mendapatkan perbedaan jumlah hari.
Timeobjek memang kembali beberapa detik.
Timeobjek, bukan Dateobjek. Mungkin Anda dapat memperbarui penamaan dalam komentar Anda untuk mencerminkan bahwa mereka bukan tanggal?
Dengan asumsi itu end_datedan start_datekeduanya adalah kelas ActiveSupport::TimeWithZonedi 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_datemengembalikan "Rab, 15 Nov 2017", sementara 23.hours.ago.to_datemengembalikan "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.daytidak rubyseperti yang diminta OP (dalam tag). Ini Railsatau lebih spesifik active supportmeskipun created_atpada dasarnya adalah Modelmetode untuk Railsitu ..
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_idan 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 Datejika waktu berlalu relevan. Gunakan Time.parsesebagai gantinya.
Untuk memiliki jumlah hari penuh antara dua tanggal ( DateTimeobjek):
((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