[PHP] Split up Date Range

2009-07-01 Thread Matt Neimeyer
I haven't been able to find anything by googling... Does anyone know
of any libraries that will split up date ranges? We've got a project
where Date Of Attendance is moving from a single type in character
field to an automatically built field based on a DateBegin date field
and a DateEnd date field. Some examples of what I'd like ideally...

Given: July 19-22, 2009
Return: 7/19/2009 and 7/22/2009

Given: July 19th and 20th
Return: 7/19/2009 and 7/20/2009 (we can safely assume current year for
this project)

Given: Sept 19, 2009 - Sept 22, 2009
Return: 9/19/2009 and 9/22/2009

Given: July 19th, 2009
Return: 7/19/2009 and 7/19/2009

Given: 7/19/2009
Return: 7/19/2009 and 7/19/2009

I could probably hack something together that would work most of the
time... but why reinvent the wheel if some poor shlub has already done
it.

If such a thing doesn't exist... then I'm considering an algorithm
like such... (and advice... yays and nays are appreciated)

Replace the names (and variations thereof) of the months with their
numeric equivilants followed by a comma. So the above would become...

7, 19-22, 2009
7, 19th and 20th
9, 19, 2009 - 9, 22, 2009
7, 19th, 2009
7/19/2009

Then replace all the th and nd and st with nothing... replace all the
ands with a dash... and eliminate spaces... and change / to ,
Giving...

7,19-22,2009
7,19-20
9,19,2009-9,22,2009
7,19,2009
7,19,2009

Then explode on commas. If you have two elements populate the third
with the current year. (This fixes 7,19-20 to 7,19-20,2009). Not a
given example, but it would also fix 7/19 to 7,19,2009.

When you have three elements then you have a valid date. Loop over
each element and populate begin and end, if you find a dash in the
current element then split on the dash and populate as needed. Yes
this would allow 7-8,19-20,2009 to create 7/19/2009 and 8/20/2009 but
I think its as safe as any assumption that regular people wouldn't
enter that as a date range.

If you have more than three elements then split on the dash and as
long as you have have only two elements then consider each item by
itself.

If it's not handled by the above rules then don't split it up.

Thanks in advance.

Matt

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Split up Date Range

2009-07-01 Thread Ashley Sheridan
On Wednesday 01 July 2009 16:25:29 Matt Neimeyer wrote:
 I haven't been able to find anything by googling... Does anyone know
 of any libraries that will split up date ranges? We've got a project
 where Date Of Attendance is moving from a single type in character
 field to an automatically built field based on a DateBegin date field
 and a DateEnd date field. Some examples of what I'd like ideally...

 Given: July 19-22, 2009
 Return: 7/19/2009 and 7/22/2009

 Given: July 19th and 20th
 Return: 7/19/2009 and 7/20/2009 (we can safely assume current year for
 this project)

 Given: Sept 19, 2009 - Sept 22, 2009
 Return: 9/19/2009 and 9/22/2009

 Given: July 19th, 2009
 Return: 7/19/2009 and 7/19/2009

 Given: 7/19/2009
 Return: 7/19/2009 and 7/19/2009

 I could probably hack something together that would work most of the
 time... but why reinvent the wheel if some poor shlub has already done
 it.

 If such a thing doesn't exist... then I'm considering an algorithm
 like such... (and advice... yays and nays are appreciated)

 Replace the names (and variations thereof) of the months with their
 numeric equivilants followed by a comma. So the above would become...

 7, 19-22, 2009
 7, 19th and 20th
 9, 19, 2009 - 9, 22, 2009
 7, 19th, 2009
 7/19/2009

 Then replace all the th and nd and st with nothing... replace all the
 ands with a dash... and eliminate spaces... and change / to ,
 Giving...

 7,19-22,2009
 7,19-20
 9,19,2009-9,22,2009
 7,19,2009
 7,19,2009

 Then explode on commas. If you have two elements populate the third
 with the current year. (This fixes 7,19-20 to 7,19-20,2009). Not a
 given example, but it would also fix 7/19 to 7,19,2009.

 When you have three elements then you have a valid date. Loop over
 each element and populate begin and end, if you find a dash in the
 current element then split on the dash and populate as needed. Yes
 this would allow 7-8,19-20,2009 to create 7/19/2009 and 8/20/2009 but
 I think its as safe as any assumption that regular people wouldn't
 enter that as a date range.

 If you have more than three elements then split on the dash and as
 long as you have have only two elements then consider each item by
 itself.

 If it's not handled by the above rules then don't split it up.

 Thanks in advance.

 Matt

Wow, first question is, why accept such a variety of inputs? Can't you force a 
particular standard for people that allows them to enter a range?

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



Re: [PHP] Split up Date Range

2009-07-01 Thread Adam Shannon
It would be easier to standardize the input so you only have to run one
regular expression check to validate and then split the data up.

On Wed, Jul 1, 2009 at 10:33 AM, Ashley Sheridan
a...@ashleysheridan.co.ukwrote:

 On Wednesday 01 July 2009 16:25:29 Matt Neimeyer wrote:
  I haven't been able to find anything by googling... Does anyone know
  of any libraries that will split up date ranges? We've got a project
  where Date Of Attendance is moving from a single type in character
  field to an automatically built field based on a DateBegin date field
  and a DateEnd date field. Some examples of what I'd like ideally...
 
  Given: July 19-22, 2009
  Return: 7/19/2009 and 7/22/2009
 
  Given: July 19th and 20th
  Return: 7/19/2009 and 7/20/2009 (we can safely assume current year for
  this project)
 
  Given: Sept 19, 2009 - Sept 22, 2009
  Return: 9/19/2009 and 9/22/2009
 
  Given: July 19th, 2009
  Return: 7/19/2009 and 7/19/2009
 
  Given: 7/19/2009
  Return: 7/19/2009 and 7/19/2009
 
  I could probably hack something together that would work most of the
  time... but why reinvent the wheel if some poor shlub has already done
  it.
 
  If such a thing doesn't exist... then I'm considering an algorithm
  like such... (and advice... yays and nays are appreciated)
 
  Replace the names (and variations thereof) of the months with their
  numeric equivilants followed by a comma. So the above would become...
 
  7, 19-22, 2009
  7, 19th and 20th
  9, 19, 2009 - 9, 22, 2009
  7, 19th, 2009
  7/19/2009
 
  Then replace all the th and nd and st with nothing... replace all the
  ands with a dash... and eliminate spaces... and change / to ,
  Giving...
 
  7,19-22,2009
  7,19-20
  9,19,2009-9,22,2009
  7,19,2009
  7,19,2009
 
  Then explode on commas. If you have two elements populate the third
  with the current year. (This fixes 7,19-20 to 7,19-20,2009). Not a
  given example, but it would also fix 7/19 to 7,19,2009.
 
  When you have three elements then you have a valid date. Loop over
  each element and populate begin and end, if you find a dash in the
  current element then split on the dash and populate as needed. Yes
  this would allow 7-8,19-20,2009 to create 7/19/2009 and 8/20/2009 but
  I think its as safe as any assumption that regular people wouldn't
  enter that as a date range.
 
  If you have more than three elements then split on the dash and as
  long as you have have only two elements then consider each item by
  itself.
 
  If it's not handled by the above rules then don't split it up.
 
  Thanks in advance.
 
  Matt

 Wow, first question is, why accept such a variety of inputs? Can't you
 force a
 particular standard for people that allows them to enter a range?

 --
 PHP General Mailing List (http://www.php.net/)
 To unsubscribe, visit: http://www.php.net/unsub.php




-- 
- Adam Shannon ( http://ashannon.us )