I'm doing this in app/views/mymodel/add.ctp
:
<?php echo $form->input('Mymodel.mydatefield'); ?>
And then, in app/controllers/mymodel_controller.php
:
function add() {
# ... (if we have some submitted data)
$datestring = $this->data['Mymodel']['mydatefield']['year'] . '-' .
$this->data['Mymodel']['mydatefield']['month'] . '-' .
$this->data['Mymodel']['mydatefield']['day'];
$mydatefield = DateTime::createFromFormat('Y-m-d', $datestring);
}
There absolutly has to be a better way to do this - I just haven't found the CakePHP way yet...
What I would like to do is:
function add() {
# ... (if we have some submitted data)
$mydatefield = $this->data['Mymodel']['mydatefiled']; # obviously doesn't work
}
I know this is an old question, but in case anyone else comes looking for an answer: CakePHP's generic Model
class has a method, ::deconstruct()
, that is used to handle this necessary logic internally. You can use it like this:
$stringDate = $this->MyModel->deconstruct('fieldname', $arrayDate)
You could write a Helper that takes in $this->data['Mymodel']['mydatefiled']
as a parameter, assumes that year/month/day are in the array, and parse accordingly:
<?php
/* /app/views/helpers/date.php */
class DateHelper extends AppHelper {
function ParseDateTime($dateField) {
$datestring = $dateField['year'] . '-' .$dateField['month'] . '-' . $dateField['day'];
return DateTime::createFromFormat('Y-m-d', $datestring);
}
}
?>
Or something like that. I think the DateTime object was added in...PHP 5.2? CakePHP 1.x is targeted at PHP 4 compatibility, so I don't think there's any "CakePHP way" to do it, at least not for 1.x.