Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby on Rails 4上的时间转换不起作用_Ruby On Rails_Ruby_Datetime_Heroku - Fatal编程技术网

Ruby on rails Ruby on Rails 4上的时间转换不起作用

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

我向供应商发送电子邮件的部分逻辑是,承诺日期必须小于今天的日期才能发送电子邮件。不管出于什么原因,它都是真实的,即使它应该是虚假的。我在控制台中测试它,结果显示为false,但它会发送电子邮件。。。所以我猜这是真的

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。问题是它正在回归真实