Module: CouchRest::Model::CoreExtensions::TimeParsing

Defined in:
lib/couchrest/model/core_extensions/time_parsing.rb

Instance Method Summary collapse

Instance Method Details

#new(*args) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
# File 'lib/couchrest/model/core_extensions/time_parsing.rb', line 17

def new(*args)
  return super() if (args.empty?)
  zone = args.delete_at(6)
  time = mktime(*args)
  if zone =~ /([\+|\-]?)(\d{2}):?(\d{2})/
    tz_difference = ("#{$1 == '-' ? '+' : '-'}#{$2}".to_i * 3600) + ($3.to_i * 60)
    time + tz_difference + zone_offset(time.zone)
  else
    time
  end
end

#parse_iso8601(string) ⇒ Object

Attemtps to parse a time string in ISO8601 format. If no match is found, the standard time parse will be used.

Times, unless provided with a time zone, are assumed to be in UTC.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/couchrest/model/core_extensions/time_parsing.rb', line 36

def parse_iso8601(string)
  if (string =~ /(\d{4})[\-|\/](\d{2})[\-|\/](\d{2})[T|\s](\d{2}):(\d{2}):(\d{2}(\.\d+)?)(Z| ?([\+|\s|\-])?(\d{2}):?(\d{2}))?/)
    # $1 = year
    # $2 = month
    # $3 = day
    # $4 = hours
    # $5 = minutes
    # $6 = seconds (with $7 for fraction)
    # $8 = UTC or Timezone
    # $9 = time zone direction
    # $10 = tz difference hours
    # $11 = tz difference minutes

    if $8 == 'Z' || $8.to_s.empty?
      utc($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_f)
    else
      new($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_f, "#{$9 == '-' ? '-' : '+'}#{$10}:#{$11}")
    end
  else
    parse(string)
  end
end