2010-08-25 6 views

Répondre

15

Essayez ceci:

#Today 
Posts.find(:all, conditions: { :created_at => Date.today...Date.today + 1 }) 
#Yesterday 
Posts.find(:all, conditions: { :created_at => Date.today - 1...Date.today }) 

Ou cela (préférable, à mon avis):

#Today 
Posts.find(:all, conditions: ["DATE(created_at) = ?", Date.today]) 
#Yesterday 
Posts.find(:all, conditions: ["DATE(created_at) = ?", Date.today - 1]) 
1

En règle générale, je stocke toutes les dates sur mon serveur dans le fuseau horaire UTC et laissez l'interface utilisateur gérer n'importe quelle conversion de fuseau horaire. Pour obtenir le type de requête que vous voulez après avoir travaillé correctement, j'ai dû masser la date entrante dans une plage de temps spécifique UTC en premier.

require 'date' 

class Post < ActiveRecord::Base 

    def self.created(a_date) 
    return Post.where(created_at: to_timerange(a_date)) 
    end 

    private 

    def self.to_timerange(a_date) 
    raise ArgumentError, "expected 'a_date' to be a Date" unless a_date.is_a? Date 
    dts = Time.new(a_date.year, a_date.month, a_date.day, 0, 0, 0).utc 
    dte = dts + (24 * 60 * 60) - 1 
    return (dts...dte) 
    end 

end 

Cela vous permet d'appeler

# today 
posts = Post.created(Date.today) 
# yesterday 
posts = Post.created(Date.today - 1) 
Questions connexes