Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: How to convert a vague time specfier into a concrete timestamp

by roho (Bishop)
on Sep 21, 2022 at 05:02 UTC ( [id://11147046]=note: print w/replies, xml ) Need Help??


in reply to How to convert a vague time specfier into a concrete timestamp

Check out "DateTime::Format::Natural". The following test code displays the translation of over 400 generic date/time expressions.

#!/usr/bin/perl use strict; use warnings; use DateTime::Format::Natural; my $parser = DateTime::Format::Natural->new( time_zone => 'America/New +_York' ); my @date_keywords; test_date_keywords(); exit; sub test_date_keywords { load_date_keywords(); for (my $i = 0; $i <= $#date_keywords; $i++) { my $dt = $parser->parse_datetime($date_keywords[$i]); my @dt = $parser->parse_datetime_duration($date_keywords[$i]); if (!$parser->success) { warn $parser->error; exit; } if (@dt) { for (@dt) { print $_->strftime('%Y-%m-%d %H:%M:%S'), qq( - "$date_ +keywords[$i]"\n); } } else { print $dt->strftime('%Y-%m-%d %H:%M:%S'), qq( - "$date_key +words[$i]"\n); } } return; } sub load_date_keywords { @date_keywords = ('06:56:06 am','06:56:06 pm','1:00 on sun','1:00 +sun','10 days ago','10 hours ago','10 minutes ago','10 months ago','1 +0 seconds ago','10 weeks ago','10 years ago','100th day','12:14 AM',' +12:14 PM','1am on sun','1am sun','1pm on sun','1pm sun','2nd monday', +'4:20pm','4pm today','4pm tomorrow','4pm yesterday','4pm','4th februa +ry','5:30am','5am today','5am tomorrow','5am yesterday','5am','6 am', +'6:00 today','6:00 tomorrow','6:00 yesterday','8 pm','afternoon','eve +ning','friday 03:00 am','friday 03:00 pm','in 5 days','in 5 hours','i +n 5 minutes','in 5 months','in 5 seconds','in 5 weeks','in 5 years',' +last day','last friday','last hour','last june','last minute','last m +onth','last quarter','last second','last week wednesday','last week', +'last year','midnight','mon 2:35','morning','next day','next friday', +'next hour','next minute','next month','next october','next quarter', +'next second','next week wednesday','next week','next year','noon','n +ovember 3rd','now','saturday','sunday 11:00','sunday at 05:00 am','su +nday at 05:00 pm','this afternoon','this day','this evening','this fr +iday','this hour','this minute','this month','this morning','this qua +rter','this second','this week wednesday','this week','this year','th +ursday afternoon','thursday evening','thursday morning','today 02:32' +,'today 2:32am','today 2:32pm','today afternoon','today at 2:32 AM',' +today at 2:32 PM','today at 4:00','today at 6:45am','today at 6:45pm' +,'today at midnight','today at noon','today evening','today morning', +'today','tomorrow 02:32','tomorrow 2:32am','tomorrow 2:32pm','tomorro +w afternoon','tomorrow at 2:32 AM','tomorrow at 2:32 PM','tomorrow at + 4:00','tomorrow at 6:45am','tomorrow at 6:45pm','tomorrow at midnigh +t','tomorrow at noon','tomorrow evening','tomorrow morning','tomorrow +','tuesday last week','tuesday next week','tuesday this week','wednes +day 02:30am','wednesday 02:30pm','wednesday 14:30','wednesday at 02:3 +0am','wednesday at 02:30pm','wednesday at 14:30','yesterday 02:32','y +esterday 2:32am','yesterday 2:32pm','yesterday afternoon','yesterday +at 2:32 AM','yesterday at 2:32 PM','yesterday at 4:00','yesterday at +6:45am','yesterday at 6:45pm','yesterday at midnight','yesterday at n +oon','yesterday evening','yesterday morning','yesterday','1:00 last f +riday','1:00 next friday','1:00 this friday','10 hours before midnigh +t','10 hours before noon','10 minutes before midnight','10 minutes be +fore noon','10 seconds before midnight','10 seconds before noon','11 +january 2 years ago','11 january last year','11 january next year','1 +1 january this year','12th day last month','12th day next month','12t +h day this month','1am last friday','1am next friday','1am this frida +y','1pm last friday','1pm next friday','1pm this friday','1st day las +t year','1st day next year','1st day this year','1st tuesday last nov +ember','1st tuesday next november','1st tuesday this november','2 day +s before now','2 hours before now','2 minutes before now','2 months b +efore now','2 seconds before now','2 weeks before now','2 years befor +e now','2nd friday in august','3 hours after today','3 hours after to +morrow','3 hours after yesterday','3 minutes after today','3 minutes +after tomorrow','3 minutes after yesterday','3 seconds after today',' +3 seconds after tomorrow','3 seconds after yesterday','3rd wednesday +in november','4 days from now','4 hours from now','4 in the afternoon +','4 minutes from now','4 months from now','4 seconds from now','4 we +eks from now','4 years from now','4th day last week','5 am last monda +y','5 am next monday','5 am this monday','5 hours after midnight','5 +hours after noon','5 minutes after midnight','5 minutes after noon',' +5 pm last monday','5 pm next monday','5 pm this monday','5 seconds af +ter midnight','5 seconds after noon','6 hours before today','6 hours +before tomorrow','6 hours before yesterday','6 in the morning','6 min +utes before today','6 minutes before tomorrow','6 minutes before yest +erday','6 mondays from now','6 seconds before today','6 seconds befor +e tomorrow','6 seconds before yesterday','6th day last week','6th day + next week','6th day this week','8th month last year','8th month next + year','8th month this year','9 in the evening','beginning of last mo +nth','end of last month','final thursday in april','fri 3 months ago +at 5am','last friday at 20:00','last sunday at 21:45','last thursday +in april','last tuesday 11 am','last tuesday 11 pm','last wednesday 7 +am','last wednesday 7pm','midnight last friday','midnight next friday +','midnight this friday','monday 4 in the afternoon','monday 6 in the + morning','monday 9 in the evening','monday last week','next friday a +t 20:00','next tuesday 11 am','next tuesday 11 pm','next wednesday 7a +m','next wednesday 7pm','noon last friday','noon next friday','noon t +his friday','saturday 3 months ago at 17:00','saturday 3 months ago a +t 5:00am','saturday 3 months ago at 5:00pm','this friday at 20:00','t +his tuesday 11 am','this tuesday 11 pm','this wednesday 7am','this we +dnesday 7pm','today 5 days ago','today 5 hours ago','today 5 minutes +ago','today 5 months ago','today 5 seconds ago','today 5 weeks ago',' +today 5 years ago','today at 13:00','tomorrow 1 year ago','tomorrow 3 + days ago','tomorrow 3 hours ago','tomorrow 3 minutes ago','tomorrow +3 months ago','tomorrow 3 seconds ago','tomorrow 3 weeks ago','tomorr +ow 3 years ago','tomorrow at 13','wednesday 1 month ago at 8pm','yest +erday 7 days ago','yesterday 7 hours ago','yesterday 7 minutes ago',' +yesterday 7 months ago','yesterday 7 seconds ago','yesterday 7 weeks +ago','yesterday 7 years ago','yesterday at 13:00','1 April to 31 Augu +st','1/3 to 2/3','100th day to 200th','10th to 20th day','16:00 nov 6 + to 17:00','1999-12-31 to tomorrow','2/3 to in 1 week','2009-03-10 9: +00 to 11:00','21:00 to 22:00 mar 3','21:00 to mar 3 22:00','26 oct 10 +:00 am to 11:00 am','3/3 21:00 to in 5 days','30th to 31st dec','30th + to dec 31st','6am dec 5 to 7am','first day of 2009 to last day of 20 +09','first day of may to last day of may','first to last day of 2008' +,'first to last day of september','for 4 days','for 4 hours','for 4 m +inutes','for 4 months','for 4 seconds','for 4 weeks','for 4 years','j +an 1 to 2','may 2nd to 5th','monday to friday','now to 2010-01-01','- +5min','+2d','1/3 16:00','1/3','11 january','17:00','18 oct 17:00','18 + oct 5 am','18 oct 5 pm','18 oct 5am','18 oct 5pm','19:00 jul 1','200 +5','2010 october 28','2011-jan-04','20111018000000','2016-06-19T12:12 +:11','27/5/1979','3 jan 2000','3/1 16:00','3/1','3:20:00','4:00','7 a +m jul 1','7 pm jul 1','7am jul 1','7pm jul 1','dec 25','feb 28 3 am', +'feb 28 3 pm','feb 28 3:00','feb 28 3am','feb 28 3pm','february 14, 2 +004','jan 24, 2011 12:00','jan 24, 2011 12am','jan 24, 2011 12pm','ja +n 3 2010','january 11','march 1st 2009','march','may 27th','October 2 +006','1 hr ago','1 min ago','1 sec ago','1 yr ago','10 secs ago','3 h +rs ago','5 mins ago','7 yrs ago','final thurs in sep','thur','thurs', +'tues this week','tues','yesterday @ noon'); return; }

"It's not how hard you work, it's how much you get done."

  • Comment on Re: How to convert a vague time specfier into a concrete timestamp
  • Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11147046]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (5)
As of 2024-04-23 23:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found