you are in: codestackercodes [RSS] → tag: date [RSS]

Chronic-like in Portuguese Delicious

show/hide lines
   1  require "rubygems"
   2  require "activesupport"
   3  require "unicode"
   4  
   5  class String
   6    def as_time
   7      str = self.dup
   8      str.downcase!
   9      str.squish!
  10      str = Unicode.normalize_KD(self).gsub(/[^\x00-\x7F]/n,'')
  11      
  12      now = Time.now
  13  
  14      if str == 'hoje'
  15        Date.today.to_time
  16      elsif str == 'agora'
  17        Time.now
  18      elsif str == 'amanha'
  19        Date.tomorrow.to_time
  20      elsif str == 'ontem'
  21        Date.yesterday.to_time
  22      elsif str == 'anteontem'
  23        2.days.ago
  24      elsif str == 'depois de amanha'
  25        2.days.from_now
  26      elsif str =~ /^proxim[oa] (semana|dia|mes|ano)$/
  27        case $1
  28          when 'semana' then now.next_week
  29          when 'dia' then Date.tomorrow.to_time
  30          when 'mes' then now.next_month
  31          when 'ano' then now.next_year
  32        end
  33      elsif str =~ /^(mes|semana|ano) que vem/
  34        case $1
  35          when 'mes' then now.next_month
  36          when 'semana' then now.next_week
  37          when 'ano' then now.next_year
  38        end
  39      elsif str =~ /^(mes|semana|ano) passad[ao]/
  40        case $1
  41          when 'mes' then now.last_month
  42          when 'semana' then now.beginning_of_week
  43          when 'ano' then now.last_year
  44        end
  45      elsif str =~ /^de (tarde|manha|noite)/
  46        case $1
  47          when 'noite' then now.beginning_of_day + 20.hours
  48          when 'tarde' then now.beginning_of_day + 15.hours
  49          when 'manha' then now.beginning_of_day + 9.hours
  50        end
  51      elsif str =~ /^daqui h?a pouco/
  52        1.hour.from_now
  53      elsif str =~ /^daqui(?: h?a)? ([0-9]+) (dias?|mes(?:es)?|semanas?|anos?|horas?|minutos?)/
  54        num = $1.to_i
  55        interval = $2.gsub(/e?s$/, '')
  56  
  57        names = {
  58          'dia' => :day,
  59          'mes' => :month,
  60          'semana' => :week,
  61          'ano' => :year,
  62          'hora' => :hour,
  63          'minuto' => :minute
  64        }
  65        
  66        num.send(names[interval]).from_now
  67      end
  68    end
  69  end
created by fnando — 02 July 2008 — get a short url — tags: activesupport chronic date normalization time embed