Saya telah sedikit dimanjakan oleh Joda-time API:
DateTime now = new DateTime();
DateTime ninetyDaysAgo = now.minusDays(90);
Saya mencoba melakukan hal serupa di Ruby, tapi saya
now = Time.now
ninetyDaysAgo = now - (90*24)
Namun, matematikanya mati di sini (saya benar-benar bekerja dengan tanggal di tengah malam).
Apakah ada API ramah untuk pengurangan tanggal?
Date
juga mengizinkan pecahan jadi Anda bisa melakukannyaDate.today - (90.0/24.0)
. Hasilnya dapat dengan mudah diubahto_datetime
atauto_time
juga.Bagi mereka yang menggunakan Rails, lihat yang berikut ini:
DateTime.now - 10.days => Sat, 04 May 2013 12:12:07 +0300 20.days.ago - 10.days => Sun, 14 Apr 2013 09:12:13 UTC +00:00
sumber
Jika Anda menggunakan Rails atau tidak keberatan menyertakan ActiveSupport, Anda dapat menggunakan DSL # hari seperti ini:
ruby-1.9.2-p136 :002 > Date.today => Wed, 02 Mar 2011 ruby-1.9.2-p136 :003 > Date.today - 90.days => Thu, 02 Dec 2010
Karena Anda bekerja dengan tanggal alih-alih waktu, Anda juga harus mulai dengan contoh Tanggal, atau mengonversi intance DateTime Anda dengan #to_date. Saat menambahkan / mengurangi angka dari contoh tanggal, jumlahnya secara implisit adalah hari.
ruby-1.9.2-p136 :016 > DateTime.now.to_date => #<Date: 2011-03-02 (4911245/2,0,2299161)> ruby-1.9.2-p136 :017 > DateTime.now.to_date - 90 => #<Date: 2010-12-02 (4911065/2,0,2299161)>
sumber
Ruby mendukung aritmatika tanggal di kelas Date dan DateTime , yang merupakan bagian dari pustaka standar Ruby. Kedua kelas tersebut mengekspos # + dan # - metode, yang menambah dan mengurangi hari dari tanggal atau waktu.
$ irb > require 'date' => true > (DateTime.new(2015,4,1) - 90).to_s # Apr 1, 2015 - 90 days => "2015-01-01T00:00:00+00:00" > (DateTime.new(2015,4,1) - 1).to_s # Apr 1, 2015 - 1 day => "2015-03-31T00:00:00+00:00"
Gunakan metode # << dan # >> untuk beroperasi pada bulan, bukan hari. Aritmatika pada bulan sedikit berbeda dengan aritmatika pada hari. Menggunakan Date daripada DateTime membuat efeknya lebih jelas.
> (Date.new(2015, 5, 31) << 3).to_s # May 31 - 3 months; 92 days diff => "2015-02-28"
Mengikuti contoh joda-time Anda, Anda mungkin menulis sesuatu seperti ini di Ruby.
now = DateTime.now ninety_days_ago = now - 90
atau mungkin saja
ninety_days_ago = DateTime.now - 90
sumber
Ini adalah postingan yang sangat lama, tetapi jika Anda ingin tetap menggunakan suatu
Time
objek, seperti yang awalnya diminta, daripada beralih keDate
objek yang mungkin ingin Anda pertimbangkan untuk digunakanRuby Facets
.Ruby Facets adalah pustaka ekstensi standar untuk kelas inti Ruby.
http://rubyworks.github.io/facets/
Dengan meminta Facet, Anda kemudian dapat melakukan hal berikut dengan objek Time.
Time.now.less(90, :days)
sumber
gunakan jumlah detik:
Time.now - 90*24*60*60
sumber
Solusi sederhana:
days90_ago = 90.days.ago.to_date.to_s OUTPUT: puts 90_days_ago => "2019-10-09" # considering cur_date: 2020-01-07
sumber