電子メールをサプライヤに送信するための私のロジックの一部は、電子メールを送信するために約束日が今日の日付よりも短くなければならないということです。どんな理由であれ、それは偽でなければならないとしても、真実であると考えています。私はコンソールでそれをテストし、それは偽を示しますが、それは電子メールを送信する...だから、私はそれが本当に通り過ぎていると推測しています。時間変換Ruby on Rails 4が動作しない
def self.send_vendor_openorder_notification(user, vendor)
po_collection = Array.new
user.purchase_orders.where({open_order: true, vendor_number: vendor.vendor_number}).where.not(email_last_sent: Time.now.midnight).each do |x|
if x.promise_date == nil || DateTime.strptime(x.promise_date, '%m/%d/%y') + 7.hours < Time.now.midnight
if x.email_sent == false
po_collection << x.id
x.email_sent = true
x.email_last_sent = Time.now.midnight
x.save
end
end
end
if po_collection.empty? == false
VendorSender.open_order_sender(user, vendor, po_collection).deliver_later
end
end
ここで、promise_dateがnilまたは今日よりも深夜になると、それは合格するはずです。しかし、「09/19/2016」の約束事日は、2014年9月19日に合格となります。 herokuコンソール(これはHerokuを通じて展開されています)では、これは間違っています...私はここで何が欠けていますか?
irb(main):038:0> DateTime.strptime("09/19/16", '%m/%d/%y') + 7.hours < Time.now.midnight
=> false
irb(main):039:0> DateTime.strptime("09/19/16", '%m/%d/%y') + 7.hours
=> Mon, 19 Sep 2016 07:00:00 +0000
irb(main):040:0> Time.now.midnight
=> 2016-09-19 00:00:00 -0700
irb(main):041:0>
両方の日付がまったく同じで、Time.now.midnightがDateTime.strptimeよりも低いかどうかを尋ねるので、falseが返されます。 – luissimo
@luissimo正しいですが、日付は同じですが、タイムゾーンは異なります。 –
私はそれが偽を返すようにしたい。問題は、実際に.zoneが働いて – Doughtz