Špatné zobrazení data ve formuláři v editaci
- kiCkZ
- Člen | 153
Nevíte jak udělat to, aby se mi v typu DATE zobrazoval výstup z DB
správně s tečkama.
V databázi mam např. due_date typ date
<?php
$form->addText('due_date', 'Datum splatnosti')
->setHtmlType('date')
->addRule($form::PATTERN, "Datum musí být ve formátu dd.mm.rrrr", "(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d")
->setRequired('%label nebylo zadáno');
?>
Po uložení je v databázi ve formátu 2018–03–31, nicméně pokud chci
záznam editovat, tak to mam prázdné v tomto formátu:
dd.mm.rrrr jako při prvním vytvoření.
- h4kuna
- Backer | 740
V databázi s tečkama v českém formátu to nechceš mít uložené. Nejde podle toho řadit. Toto je iso formát. Většinou javascriptová udělátka umí přijmout tento iso formát a převést ho do správné localizace a na server ti poslat opět iso. například flatpickr
Input typ date na desktopech je zatím nepoužitelný.
Editoval h4kuna (12. 3. 2018 16:01)
- Ondřej Kubíček
- Člen | 494
h4kuna napsal(a):
Input typ date na desktopech je zatím nepoužitelný.
to bych právě neřekl, prohlížeč ti dokáže zobrazit české datum dd.mm.yyyy a přitom na server odešle yyyy-mm-dd
- h4kuna
- Backer | 740
To nerozporuju. Myslel jsem to tak že nic převádět nemusí, směrem ke klientovi a nazpět. Proto ani není důvod si držet český datum v databázi plus další nevýhody. V chrome mi přišel takový ošklivý, radši jsem volil flatpickr. Ve firefoxu je od verze 57 jinak předchozí nemaj podporu, IE11 nic, ale to jsou jednotky procent.
Já jsem to bral ze svého pohledu „nepoužitelný“, pokud je to do administrace, tak asi ok.
Ten flatpickr na mobilech právě používá nativní kalendáře a na desktopech jsou všude stejný.
Editoval h4kuna (12. 3. 2018 16:17)
- Ondřej Kubíček
- Člen | 494
to je divný, takže v db to máš ok a pokud to chceš vypsat do inputu tak
by ti mělo stačit to tam předat
tohle ti např v českém chrome vypíše 12.3.2018 viz https://jsfiddle.net/gyutk6w7/
<input type="date" value="2018-03-12">
když si v konzoli zobrazíš ten input tak ve value je co?
Editoval Ondřej Kubíček (12. 3. 2018 17:12)
- kiCkZ
- Člen | 153
Přesně jak píšeš, já mam naopak v inputu při zadání 12.3.2018 s tím, že mam na tom inputu setType(‚date‘) a po nahrání do DB to tam je v pořádku jako 2018–12–03, ale jakmile jdu editovat položku s datumem, tak to mam zase defaultně jako vzor zde(dd.mm.rrrr) a přitom value je v konzoli toto: 2018–03–30 00:00:00
Takto je definován input
<?php
$form->addText('receive_date', 'Datum přijetí faktury')
->setType('date')
->setDefaultValue(date_format(new \DateTime(), 'd-m-Y'))
->setRequired('%label nebylo zadáno');
?>
- kiCkZ
- Člen | 153
Ondřej Kubíček napsal(a):
nepřepisuješ si to pak někde? ten example cos poslal funguje správně
Vůbec nwm kde by mělo, je tu jen akce EDIT a jinak pak už jsou v tom formuláři data z db.
<?php
public function actionEdit($id) {
$this->id = (int)$id;
$invoice = $this->receivedInvoiceRepository->get($id);
if (!$invoice) {
$this->error('Faktura nebyla nalezena');
}
$this['invoiceForm']->setDefaults($invoice);
}
?>
- Ondřej Kubíček
- Člen | 494
no a jsme doma
ten receive_date co máš v $invoice se vrací jako Nette\Utils\Datetime, a
když to takhle napřímo setneš vloží se tam Y-m-d H:i:s, proto v tom
inputu máš 2018–03–30 00:00:00, což je špatný formát pro date, musíš
si ten datum napřed přeformátovat do Y-m-d
- kiCkZ
- Člen | 153
Tak ani toto problém nevyřešilo, stále je to defaultně zobrazené
v tomto tvaru dd.mm.rrrr namísto načtění z DB.
<?php
public function actionEdit($id) {
$this->id = (int)$id;
$invoice = $this->receivedInvoiceRepository->get($id);
if (!$invoice) {
$this->error('Faktura nebyla nalezena');
}
$invoice->receive_date->format('Y-m-d');
$this['invoiceForm']->setDefaults($invoice);
}
?>
I když dám formát
<?php
$invoice->receive_date->format('d.m.Y');
?>
Tak se to nepřepíše…to už fakt nechápu…
Editoval kiCkZ (13. 3. 2018 10:42)
- Ondřej Kubíček
- Člen | 494
to ti nebude fungovat, ten formát vrací string, který nikam nepředáváš
$this['invoiceForm']->setDefaults($invoice);
$this['invoiceForm']['receive_date']->setDefaultValue($invoice->receive_date->format('Y-m-d'));