module DR::TimeParse

Public Instance Methods

parse(s, **opt) click to toggle source
# File lib/dr/parse/time_parse.rb, line 11
def parse(s, **opt)
        return s if Date===s or Time===s

        !opt[:norange] and s.match(/(.*)\.\.(.*)/) do |m|
                first=m[1]
                second=m[2]
                opt[:norange]=true
                return Chronic::Span.new(self.parse(first, **opt),self.parse(second, **opt))
        end

        if s.match(/\A[[:space:]]*\z/) # blank
                t=Time.now
        elsif s[0] =~ /[+-]/
                #if s=+3.years-1.minutes
                begin
                        t=eval(s)
                rescue SyntaxError
                #if s=3 years
                        t=ChronicDuration.parse(s[1...s.length])
                        t=-t if s[0]=='-'
                end
                case t
                when Time
                else
                        t=Time.now+t
                end
                return t
        else

                chronicopts=[:context,:now,:guess,:ambiguous_time_range,:endian_precedence,:ambiguous_year_future_bias]
                chronicopt={hours24: true, ambiguous_time_range: 0, endian_precedence: [:little,:middle]}
                chronicopt[:guess]=false if opt[:range]
                chronicopt.update(opt.reject {|k,v| not chronicopts.include?(k)})
                #puts chronicopt
                t=Chronic.parse(s, chronicopt)
                t=Time.parse(s) if not t
        end
        if opt[:range] && !opt[:norange] then
                return time_to_day_range(t) unless Range === t
        end
        return t
end
time_to_day_range(t) click to toggle source
# File lib/dr/parse/time_parse.rb, line 8
def time_to_day_range(t)
        return Chronic.parse(t.to_date, guess:false)
end