# String to date/time?

**URL:** <https://www.ruby-forum.com/t/string-to-date-time/60238>\
**Category:** Rails\
**Created:** [May 11, 2006, 2:50pm UTC](https://www.ruby-forum.com/t/string-to-date-time/60238 "2006-05-11T14:50:04Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![isaacrtree](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@isaacrtree](https://www.ruby-forum.com/u/isaacrtree)\
**Post date:** [May 11, 2006, 2:50pm UTC](https://www.ruby-forum.com/t/string-to-date-time/60238/1 "2006-05-11T14:50:04Z")

</div>

Hey All,

Anyone know of a library for parsing “human” dates, like “this friday”  
or “2 days ago”? I used to use strtotime in php, but starting from  
here;

[http://wiki.rubyonrails.com/rails/pages/PhpStrtotime](http://wiki.rubyonrails.com/rails/pages/PhpStrtotime)

and doing lots of googling, I haven’t been able to find anything  
similar for ruby. I know of javascript solutions to this, but I’d  
need to do this processing on the server.

Thanks!

- Isaac

---

<div class="post-metadata">

**Author:** ![isaacrtree](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@isaacrtree](https://www.ruby-forum.com/u/isaacrtree)\
**Post date:** [May 11, 2006, 8:02pm UTC](https://www.ruby-forum.com/t/string-to-date-time/60238/2 "2006-05-11T20:02:39Z")

</div>

> Anyone know of a library for parsing “human” dates, like “this friday”  
> or “2 days ago”? I used to use strtotime in php, but starting from  
> here;

Have not used it myself, but…

[http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Conversions.html](http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Conversions.html)

-philip

---

<div class="post-metadata">

**Author:** ![isaacrtree](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@isaacrtree](https://www.ruby-forum.com/u/isaacrtree)\
**Post date:** [May 11, 2006, 10:19pm UTC](https://www.ruby-forum.com/t/string-to-date-time/60238/3 "2006-05-11T22:19:17Z")

</div>

On 5/11/06, Philip H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Anyone know of a library for parsing “human” dates, like “this friday”  
> > or “2 days ago”? I used to use strtotime in php, but starting from  
> > here;
> 
> Have not used it myself, but…
> 
> [http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Conversions.html](http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/String/Conversions.html)

Philip, thanks for the reference. Unfortunately those methods use  
ParseDate.parsedate, which is good for converting formatted date/times  
that are strings like “Sat May 14 19:28:13 IST 2005”, but it doesn’t  
understand common language formats, like “this friday” or “today”.

- Isaac

---

<div class="post-metadata">

**Author:** ![isaacrtree](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@isaacrtree](https://www.ruby-forum.com/u/isaacrtree)\
**Post date:** [May 12, 2006, 3:26am UTC](https://www.ruby-forum.com/t/string-to-date-time/60238/4 "2006-05-12T03:26:28Z")

</div>

My validates\_date\_time plugin understands common formats like:

1 Jan 06  
2006-01-01  
1 January 2006  
1/1/06

And could easily be extended to parse strings such as ‘today’, ‘this  
friday’ etc… by extending the parsing a bit.

Have a go and send me a patch if you want:

[http://svn.viney.net.nz/things/rails/plugins/validates\_date\_time](http://svn.viney.net.nz/things/rails/plugins/validates_date_time)

The problem with the String#to\_date and String#to\_time is that they  
are too lenient and often guess wrongly given ambiguous input.

-Jonathan.

---

<div class="post-metadata">

**Author:** ![isaacrtree](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/65b543/32.png) [@isaacrtree](https://www.ruby-forum.com/u/isaacrtree)\
**Post date:** [May 11, 2006, 10:29pm UTC](https://www.ruby-forum.com/t/string-to-date-time/60238/5 "2006-05-11T22:29:03Z")

</div>

Sounds like a great opportunity for a plugin.
