Editace datumu ve formuláři
- Dark0ne
- Člen | 47
Zdravím,
mám formulář, ve kterém potřebuji editovat dříve zadané datum (v MySQL
databázi uložené jako datový typ DATE).
$form->addText('od_data', 'Spotreba od')->setDefaultValue($this->data['od_data']->format('d.m.Y'));
Pokud uložím editované datum takto naformátované, tak se mi do databáze
uloží nějaký nesmysl. Prosím o radu, jak zachovat v editačním
formuláři lidský formát data (d.m.Y), ale aby zároveň došlo ke
správnému uložení do databáze, které vyžaduje zřejmě obecný Y-m-d.
Díky za rady.
- Dark0ne
- Člen | 47
Super, už mi to funguje. Předal jsem to parametrem metodě v Modelu a tam to uložil přímo do databáze bez formátování.
Presenter:
public function editFormSucceeded(Form $form, $values) {
$date = new \Nette\Utils\DateTime($values["od_data"]);
$this->getModel()->editSpotreba($values, $date);
$this->flashMessage('Záznam byl upraven');
$this->redirect('Spotreba:');
}
- enumag
- Člen | 2118
Osobně to dělám tak že inputu dám atribut type="date"
, což
je ideální pro mobily. Pro desktopy pak ten input skryju javascriptem a
přidám nový textový input s datepickerem a lokalizovaným formátem.
Hodnotu synchronizuju do skrytého inputu pomocí JS událostí a přitom
měním formát pomocí knihovny Moment.js.
Možná to zní složitě, ale není. Používám Bootstrap Datepicker + jsem si napsal tuhle funkci:
replaceDateTime: function (field, visibleFormat, hiddenFormat) {
var replacement = $('<input>');
replacement.attr('class', field.attr('class'));
replacement.val(moment(field.val()).format(visibleFormat));
replacement.insertAfter(field);
replacement.datetimepicker({
locale: 'cs',
format: visibleFormat,
sideBySide: true,
useCurrent: false,
});
replacement.on('dp.change', function (e) {
field.val(e.date ? moment(e.date).format(hiddenFormat) : '');
});
field.hide();
},
Editoval enumag (13. 2. 2016 14:05)