Špatné zobrazení data ve formuláři v editaci

před 5 měsíci

kiCkZ
Člen | 118
+
0
-

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í.

před 5 měsíci

h4kuna
Člen | 644
+
0
-

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. 16:01)

před 5 měsíci

Ondřej Kubíček
Člen | 234
+
0
-

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

před 5 měsíci

h4kuna
Člen | 644
+
0
-

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. 16:17)

před 5 měsíci

kiCkZ
Člen | 118
+
0
-

Mě jde přesně o to co psal Ondřej, protože já mam v Db s pomlčkou a na webu se mi nechce s tečkou vypsat pokud mam type date.

před 5 měsíci

Ondřej Kubíček
Člen | 234
+
0
-

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. 17:12)

před 5 měsíci

kiCkZ
Člen | 118
+
0
-

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');
?>

před 5 měsíci

Ondřej Kubíček
Člen | 234
+
0
-

máš blbě ‚d-m-Y‘, má být Y-m-d

před 5 měsíci

kiCkZ
Člen | 118
+
0
-

Ondřej Kubíček napsal(a):

máš blbě ‚d-m-Y‘, má být Y-m-d

ok, ale i ve formuláři, kde tu default nemam tak to nejde

před 5 měsíci

Ondřej Kubíček
Člen | 234
+
0
-

nepřepisuješ si to pak někde? ten example cos poslal funguje správně

před 5 měsíci

kiCkZ
Člen | 118
+
0
-

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);
    }

?>

před 5 měsíci

Ondřej Kubíček
Člen | 234
+
0
-

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

před 5 měsíci

kiCkZ
Člen | 118
+
0
-

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. 10:42)

před 5 měsíci

Ondřej Kubíček
Člen | 234
+
+2
-

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'));

před 5 měsíci

kiCkZ
Člen | 118
+
0
-

Super, děkuju moc už je to v pořádku :)

Ještě jednou díky za trpělivost.