Module: SugarCube::DateParser

Defined in:
lib/cocoa/sugarcube-nsdate/date_parser.rb

Class Method Summary collapse

Class Method Details

.iso8601(date_string) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/cocoa/sugarcube-nsdate/date_parser.rb', line 47

def iso8601(date_string)
  @@sugarcube_iso_detectors ||= [
    "yyyy-MM-dd'T'HH:mm:ss",
    "yyyy-MM-dd'T'HH:mm:ssZ",
    "yyyy-MM-dd'T'HH:mm:ss.S",
    "yyyy-MM-dd'T'HH:mm:ss.SZ",
    ].map do |date_format|
      formatter = NSDateFormatter.alloc.init
      formatter.timeZone = NSTimeZone.timeZoneWithAbbreviation "UTC"
      formatter.dateFormat = date_format
      formatter
    end
  return @@sugarcube_iso_detectors.inject(nil) { |date, formatter| date || formatter.dateFromString(date_string) }
end

.match(date_string) ⇒ Object

Parse a date into a raw match array for further processing



43
44
45
# File 'lib/cocoa/sugarcube-nsdate/date_parser.rb', line 43

def match(date_string)
  sugarcube_detect(date_string)
end

.parse_date(date_string) ⇒ Object

Parse a date string: E.g.:

SugarCube::DateParser.parse_date "There is a date in here tomorrow at 9:00 AM"

=> 2013-02-20 09:00:00 -0800



10
11
12
13
14
15
16
17
# File 'lib/cocoa/sugarcube-nsdate/date_parser.rb', line 10

def parse_date(date_string)
  result = sugarcube_detect(date_string).first
  if result
    return result.date
  else
    return iso8601(date_string)
  end
end

.parse_duration(date_string) ⇒ Object

Parse a date string: E.g.:

SugarCube::DateParser.parse_date "You have a meeting from 9:00 AM to 3:00 PM"

=> 21600.0

Divide by 3600.0 to get number of hours duration.



37
38
39
40
# File 'lib/cocoa/sugarcube-nsdate/date_parser.rb', line 37

def parse_duration(date_string)
  result = sugarcube_detect(date_string).first
  result && result.send(:duration)
end

.parse_time_zone(date_string) ⇒ Object

Parse time zone from date

SugarCube::DateParser.parse_date "There is a date in here tomorrow at 9:00 AM EDT"

Caveat: This is implemented per Apple documentation. I've never really seen it work.



25
26
27
28
# File 'lib/cocoa/sugarcube-nsdate/date_parser.rb', line 25

def parse_time_zone(date_string)
  result = sugarcube_detect(date_string).first
  result && result.timeZone
end