Sha256: c65840a250b87efabaa224d3c0c2d60bec901dd374144baf363097b5a7669530
Contents?: true
Size: 1.72 KB
Versions: 2
Compression:
Stored size: 1.72 KB
Contents
module SugarCube module DateParser # 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 def self.parse_date(date_string) detect(date_string).first.date end # 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. def self.parse_time_zone(date_string) detect(date_string).first.timeZone end # 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. def self.parse_duration(date_string) detect(date_string).first.duration end # Parse a date into a raw match array for further processing def self.match(date_string) detect(date_string) end private def self.detect(date_string) error = Pointer.new(:object) detector = NSDataDetector.dataDetectorWithTypes(NSTextCheckingTypeDate, error:error) matches = detector.matchesInString(date_string, options:0, range:NSMakeRange(0, date_string.length)) end end end class String # Use NSDataDetector to parse a string containing a date # or duration. These can be of the form: # # "tomorrow at 7:30 PM" # "11.23.2013" # "from 7:30 to 10:00 AM" # # etc. def to_date SugarCube::DateParser.parse_date(self) end def to_timezone SugarCube::DateParser.parse_timezone(self) end def to_duration SugarCube::DateParser.parse_duration(self) end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sugarcube-0.18.19 | lib/sugarcube/date_parser.rb |
sugarcube-0.18.18 | lib/sugarcube/date_parser.rb |