[Dbix-class] Pointless update on a date field

Richard Jones ra.jones at dpw.clara.co.uk
Mon Sep 17 20:26:05 GMT 2007


Jason Kohles wrote:
>> How then do I do something like $schema->update( \%form_data ) when 
>> the user submits a date formatted as '20/12/2000'. How would you do it 
>> with the US equivalent '12/20/2000'?
>>
> As I understand it, you have a date_to_mysql() method that takes a 
> variety of different date formats and turns them into mysql formatted 
> dates, what you should probably do is turn that into a 
> date_to_datetime() method, that returns a DateTime object instead of a 
> mysql-formatted date.  In my case I just use HTML::FormFu with an 

Right, all appears to work OK if I use a date_to_datetime() method 
instead of a date_to_mysql() one. But in one sense I don't really gain 
much as I still have to manually parse the users' date input to create a 
datetime object, ie

instead of date_to_mysql():
return join '-', Decode_Date_EU($date);

I have:
my ($yr, $month, $day) = Date::Calc::Decode_Date_EU($date);
return DateTime->new( year => $yr, month => $month, day => $day);

Slightly more code, and I still have to send every instance of a users' 
date input to the date_to_datetime() method. Is this the price I have to 
pay for allowing flexibility in allowing the user to input dates in any 
(EU) date format?

I was hoping I could use inflate/deflate to transparently handle dates 
going in and out of the db without requiring further manipulation. 
DateTime::Format::MySQL doesn't really help as it requires dates in 
MySQL format (ie yyyy-mm-dd) already.

One advantage I gain by using a DateTime object though is that the dob 
field is handled correctly now, and is not updated inappropriately, 
which was the original point of this thread.
-- 
Richard Jones



More information about the DBIx-Class mailing list