Ruby on rails Ruby on Rails 4上的时间转换不起作用
我向供应商发送电子邮件的部分逻辑是,承诺日期必须小于今天的日期才能发送电子邮件。不管出于什么原因,它都是真实的,即使它应该是虚假的。我在控制台中测试它,结果显示为false,但它会发送电子邮件。。。所以我猜这是真的Ruby on rails Ruby on Rails 4上的时间转换不起作用,ruby-on-rails,ruby,datetime,heroku,Ruby On Rails,Ruby,Datetime,Heroku,我向供应商发送电子邮件的部分逻辑是,承诺日期必须小于今天的日期才能发送电子邮件。不管出于什么原因,它都是真实的,即使它应该是虚假的。我在控制台中测试它,结果显示为false,但它会发送电子邮件。。。所以我猜这是真的 def self.send_vendor_openorder_notification(user, vendor) po_collection = Array.new user.purchase_orders.where({open_order: true, vend
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
def self.send_vendor_openorder_通知(用户、供应商)
po_collection=Array.new
user.purchase_orders.where({open_order:true,vendor_number:vendor.vendor_number})。where.not(email_last_sent:Time.now.midnight)。每个do|x|
如果x.promise_date==nil | | DateTime.strtime(x.promise_date,'%m/%d/%y')+7.h错误
irb(main):039:0>DateTime.strtime(“09/19/16”,“%m/%d/%y”)+7.5小时
=>2016年9月19日星期一07:00:00+0000
irb(主):040:0>时间.现在.午夜
=> 2016-09-19 00:00:00 -0700
irb(主要):041:0>
我想问题出在你的时区上
始终使用Time.zone.now
而不是Time.now
。更多细节
如果出现这种情况,您可以更改
x.promise_date == nil || (Time.zone.parse(x.promise_date.strftime('%Y-%m-%d'))) + 7.hours < Time.zone.now.midnight
x.promise_date==nil | |(Time.zone.parse(x.promise_date.strftime(“%Y-%m-%d”))+7.h
希望这有帮助。我想问题在于你的时区
始终使用Time.zone.now
而不是Time.now
。更多细节
如果出现这种情况,您可以更改
x.promise_date == nil || (Time.zone.parse(x.promise_date.strftime('%Y-%m-%d'))) + 7.hours < Time.zone.now.midnight
x.promise_date==nil | |(Time.zone.parse(x.promise_date.strftime(“%Y-%m-%d”))+7.h
希望这有帮助。返回false,因为两个日期完全相同,并且您询问Time.now.午夜是否低于DateTime.strtime。@luissimo是正确的,日期相同,但时区不同。我希望返回false。问题是它返回的是true。它返回的是false,因为两个日期完全相同,并且您询问Time.now.midnight是否低于DateTime.strtime。@luissimo是正确的,日期相同,但时区不同。我希望它返回false。问题是它正在回归真实