Nezobrazuje se mi datum ale dd.mm.r

vanaveno
Člen | 144
+
0
-

Ahojte nevím kde mám problém, ale když chci editovat článek, tak místo datumu se mi ukazuje dd.mm.rrrr. Tabulku fromDate mám nastavenou na timestamp.

<?php
        $d = new DateTime();
        $date = $d->format('Y-m-d');

        $datetime = $this->postManager->getPosts()->get($this->postItem->postId);
        if (!empty($datetime->fromDate)) {
                  bdump($datetime->fromDate);
            $form->addText('fromDate', 'Publikovat od:')
            ->setType('date')
            ->setDefaultValue(($datetime->fromDate)->format('Y-m-d'));
        } else {
            $form->addText('fromDate', 'Publikovat od:')
                   ->setDefaultValue($date)
                   ->setType('date');
        }

?>
nightfish
Člen | 471
+
0
-

vanaveno napsal(a):
když chci editovat článek, tak místo datumu se mi ukazuje dd.mm.rrrr.

Kód, který jsi poslal, za to skoro určitě nemůže (už jen proto, že v něm používáš formát Y-m-d, tedy rrrr-mm-dd). Nemáš tam nasazený nějaký Javascriptový datepicker, který by to mohl způsobovat? Jak vypadá vygenerovaný HTML kód toho input, ve kterém se ti ukazuje dd.mm.rrrr?

vanaveno
Člen | 144
+
0
-

nightfish napsal(a):

vanaveno napsal(a):
když chci editovat článek, tak místo datumu se mi ukazuje dd.mm.rrrr.

Kód, který jsi poslal, za to skoro určitě nemůže (už jen proto, že v něm používáš formát Y-m-d, tedy rrrr-mm-dd). Nemáš tam nasazený nějaký Javascriptový datepicker, který by to mohl způsobovat? Jak vypadá vygenerovaný HTML kód toho input, ve kterém se ti ukazuje dd.mm.rrrr?

Jo čoveče mám tam bootstrap js
<input type=„date“ name=„fromDate“ id=„frm-postForm-fromDate“ value=„-0001–11–30 00:00:00“>

Kamil Valenta
Člen | 758
+
+2
-

nightfish napsal(a):

Kód, který jsi poslal, za to skoro určitě nemůže (už jen proto, že v něm používáš formát Y-m-d, tedy rrrr-mm-dd).

Input „date“ (z HTML5) přijímá value ve formátu Y-m-d a prezentuje ji podle locale OS, takže klidně dd.mm.rrrr, ve chvíli, kdy je value prázdné nebo ve formátu, kterému nerozumí.
A to se přesně děje, když mu tam přijde „-0001–11–30 00:00:00“. Tato hodnota není Y-m-d, takže ji ignoruje a nabízí prázdnou masku.

Editoval Kamil Valenta (16. 3. 2022 22:32)

vanaveno
Člen | 144
+
0
-

Kamil Valenta napsal(a):

nightfish napsal(a):

Kód, který jsi poslal, za to skoro určitě nemůže (už jen proto, že v něm používáš formát Y-m-d, tedy rrrr-mm-dd).

Input „date“ (z HTML5) přijímá value ve formátu Y-m-d a prezentuje ji podle locale OS, takže klidně dd.mm.rrrr, ve chvíli, kdy je value prázdné nebo ve formátu, kterému nerozumí.
A to se přesně děje, když mu tam přijde „-0001–11–30 00:00:00“. Tato hodnota není Y-m-d, takže ji ignoruje a nabízí prázdnou masku.

Tohle mi hlási laděnka bdump($datetime->fromDate); a tuto hodnotu vkládám do ->setDefaultValue;

Nette\Utils\DateTime

date ⇒ „2022–03–16 00:00:00.000000“
timezone_type ⇒ 3
timezone ⇒ „Europe/Prague“

vanaveno
Člen | 144
+
0
-

Jinak tohle se mmně zobrazuje ve formuláři <input type=„date“ name=„fromDate“ id=„frm-postForm-fromDate“ value=„2022–03–01 00:00:00“> ale formulář stále ukazuje dd.mm.rrrr

Kamil Valenta
Člen | 758
+
+2
-

Input type=„date“ vždy zobrazí jen masku dd.mm.rrrr pokud mu value přijde v jiném formátu než Y-m-d. „2022–03–01 00:00:00“ není Y-m-d.

vanaveno
Člen | 144
+
0
-

Kamil Valenta napsal(a):

Input type=„date“ vždy zobrazí jen masku dd.mm.rrrr pokud mu value přijde v jiném formátu než Y-m-d. „2022–03–01 00:00:00“ není Y-m-d.

Ok ale jak toho dosáhnu, když do formuláže hakodefaultVaulue strkám datum ve formátu „2022–03–14“

Kamil Valenta
Člen | 758
+
0
-

Ukaž aktuální kód a ukaž dump přesně toho, co posíláš do setDefaultValue(). Ověř, že se nikde později nevolá např. setDefaults().

vanaveno
Člen | 144
+
0
-

Kamil Valenta napsal(a):

Ukaž aktuální kód a ukaž dump přesně toho, co posíláš do setDefaultValue(). Ověř, že se nikde později nevolá např. setDefaults().

<?php
        //fromDate
        $d = new DateTime();
        $date = $d->format('Y-m-d');
        $datetime = $this->postManager->getPosts()->get($this->postItem->postId);
        if (!empty($datetime->fromDate))
         {
            $date = $datetime->fromDate;
            $datetime = $date->format('Y-m-d');
            bdump($datetime);
            $form->addText('fromDate', 'Termín do:')
                   ->setDefaultValue($datetime)
                   ->setType('date');
        } else {
            $form->addText('fromDate', 'Termín do:')
                   ->setDefaultValue($date)
                   ->setType('date');
        }
?>

bdump($datetime);
„2022–03–14“ (10)
Jakým příkazem tohle ověřím? Ověř, že se nikde později nevolá např. setDefaults().
Děkuji za pomoc

Kamil Valenta
Člen | 758
+
0
-

Okem? :) Prostě jestli někde později není $form->setDefaults($row); apod., které by předchozí setDefaultValue() přerazilo.
bdump($datetime);„2022–03–14“ (10) vypadá cajk, jaký je stav po vykreslení v DOM? Ideálně přímo ve Zdrojovém kódu HTML (ne inspect v nějakém DevToolu, kde na to už mohl sáhnout JS)

Editoval Kamil Valenta (21. 3. 2022 13:15)

vanaveno
Člen | 144
+
0
-

Kamil Valenta napsal(a):

Okem? :) Prostě jestli někde později není $form->setDefaults($row); apod., které by předchozí setDefaultValue() přerazilo.
bdump($datetime);„2022–03–14“ (10) vypadá cajk, jaký je stav po vykreslení v DOM? Ideálně přímo ve Zdrojovém kódu HTML (ne inspect v nějakém DevToolu, kde na to už mohl sáhnout JS)

Ahoj po odmlce jsem se k tomu problému zase vrátil, je velmi zajímavé, že se mi ve formuláři zobrazuje hodnota 2022–03–29 00:00:00
<input type=„date“ name=„fromDate“ id=„frm-postForm-fromDate“ value=„2022–03–28 00:00:00“>

a přitom mám tabulku fromDate nastavenou na DATE format a hodnota je zapsaná 2022–03–28

Kamil Valenta
Člen | 758
+
+2
-

To až tak zajímavé není, protože ActiveRow konvertuje sloupce s datem a časem na object.
Zajímavé spíš je, že píšeš, že dump to vrátil bez času a do inputu to šlo s časem, přitom mezi dumpem a inputem nic nemáš. Skoro bych řekl, že něco je někde jinak, než uvádíš…

vanaveno
Člen | 144
+
0
-

Kamil Valenta napsal(a):

To až tak zajímavé není, protože ActiveRow konvertuje sloupce s datem a časem na object.
Zajímavé spíš je, že píšeš, že dump to vrátil bez času a do inputu to šlo s časem, přitom mezi dumpem a inputem nic nemáš. Skoro bych řekl, že něco je někde jinak, než uvádíš…

Teď to mám takhle, fromDate si to bere přímo z databáze

<?php
        if (!empty($this->postItem->postId))
         {
            $date = $this->postManager->getPosts()->get($this->postItem->postId);
            $form->addText('fromDate', 'Termín do:')
                   ->setType('date');
        } else {
            $form->addText('fromDate', 'Termín do:')
                   ->setType('date');
        }
?>
Pepino
Člen | 249
+
+1
-

@vanaveno a kde máš nastavení hodnoty toho políčka fromDate?

vanaveno
Člen | 144
+
0
-

Pepino napsal(a):

@vanaveno a kde máš nastavení hodnoty toho políčka fromDate?

To si teď bere přímo z tabulky databaze fromDate
<input type=„date“ name=„fromDate“ id=„frm-postForm-fromDate“ value=„2022–03–28 00:00:00“>

Pepino
Člen | 249
+
0
-

@vanaveno ukaž kód kde nastavuješ hodnotu toho políčka. Samo se nic nenastavuje.

vanaveno
Člen | 144
+
0
-

Pepino napsal(a):

@vanaveno ukaž kód kde nastavuješ hodnotu toho políčka. Samo se nic nenastavuje.

CREATE TABLE blog_posts (
postId int(11) NOT NULL,
langId int(3) NOT NULL,
userId int(11) NOT NULL,
parentId int(11) NOT NULL,
title varchar(255) NOT NULL,
content text NOT NULL,
shortContent varchar(255) DEFAULT NULL,
meta text NOT NULL,
metatitle varchar(255) DEFAULT NULL,
source varchar(255) DEFAULT NULL,
slug varchar(255) NOT NULL,
topic tinyint(1) NOT NULL,
publish tinyint(1) NOT NULL,
access int(10) DEFAULT NULL,
fromDate date NOT NULL,
toDate date NOT NULL,
orderItem varchar(2) NOT NULL DEFAULT ‚0‘,
updated_at timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
created_at timestamp NOT NULL DEFAULT current_timestamp()
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

Pepino
Člen | 249
+
0
-

@vanaveno v prvním příspěvku máš setDedaultValue, teď v tom php kódu to nemáš. Takže jak nastavuješ hodnotu tomu inputu?

Editoval Pepino (28. 3. 2022 18:17)

vanaveno
Člen | 144
+
0
-

Pepino napsal(a):

@vanaveno v prvním příspěvku máš setDedaultValue, teď v tom php kódu to nemáš. Takže jak nastavuješ hodnotu tomu inputu?

<?php
        if (!empty($this->postItem->postId))
         {
            $datetime = $this->postManager->getPosts()->get($this->postItem->postId);
            $datetime = ($datetime->fromDate)->format('Y-m-d');
            bdump($datetime);
            $form->addText('fromDate', 'Termín do:')
            ->setDefaultValue($datetime)
                   ->setType('date');
        } else {
            $form->addText('fromDate', 'Termín do:')
                   ->setType('date');
        }
?>

bdump → „2022–03–28“ (10) a políčko mi stále ukazuje dd. mm. rrrr

Pepino
Člen | 249
+
0
-

@vanaveno jak uz psal nekdo nahore. Nemas tam naky javascript? Co mas za prohlizec? Kdyz udelas jenom input type=date tak je to datepicker? Defaultni nebo jaky? Ukaz screenshot.

stepos2
Člen | 51
+
0
-

Nevoláš někde níže v kódu něco ve stylu $form->setDefaults($post->toArray())?

vanaveno
Člen | 144
+
0
-

Tak jediné co mi funguje, že jsem formulář fromDate přejmenoval na from2Date a do default hodnoty vkládám fromDate s tabulky

<?php
        $d = new DateTime();
        $date = $d->format('Y-m-d');
        $datetime = $this->postManager->getPosts()->get($this->postItem->postId);
        if (!empty($datetime->fromDate))
         {
            $date = $datetime->fromDate;
            $datetime = $date->format('Y-m-d');

            $form->addText('from2Date', 'Termín do:')
                   ->setDefaultValue($datetime)
                   ->setType('date');
        } else {
            $form->addText('from2Date', 'Termín do:')
                   ->setDefaultValue($date)
                   ->setType('date');
        }
?>
Kamil Valenta
Člen | 758
+
+2
-

Už to tady zaznělo hodněkrát. Buď tu defaultValue někde později přerazíš něčím jiným, nebo na to saháš JS (poznal bys z HTML zdroje).
K problému patrně vůbec nedochází v těch fragmentech, které sem dáváš.

A popravdě, ani se moc nedivím, že se v tom plácáš, protože se v tom patrně bude plácat i kdokoliv jiný, kdo k tomu po Tobě zasedne. Mnohé věci jsou v kódu téměř až matoucí.

$datetime = $this->postManager->getPosts()->get($this->postItem->postId);

Proč se tohle jmenuje „datetime“, když to neobsahuje datum a čas?

$date = $datetime->fromDate;

Proč se tohle jmenuje „date“, když to obsahuje object s datem a časem?

$datetime = $date->format('Y-m-d');

Proč se tohle jmenuje „datetime“, když to naopak obsahuje jen datum?

Na 5 řádcích je $datetime jednou ActiveRow, jednout datum, nikdy datum a čas.
To pak není divu, že nastavení defaultValue jednoho inputu řešíš 13 dní…

vanaveno
Člen | 144
+
0
-

Kamil Valenta napsal(a):

Už to tady zaznělo hodněkrát. Buď tu defaultValue někde později přerazíš něčím jiným, nebo na to saháš JS (poznal bys z HTML zdroje).
K problému patrně vůbec nedochází v těch fragmentech, které sem dáváš.

A popravdě, ani se moc nedivím, že se v tom plácáš, protože se v tom patrně bude plácat i kdokoliv jiný, kdo k tomu po Tobě zasedne. Mnohé věci jsou v kódu téměř až matoucí.

$datetime = $this->postManager->getPosts()->get($this->postItem->postId);

Proč se tohle jmenuje „datetime“, když to neobsahuje datum a čas?

$date = $datetime->fromDate;

Proč se tohle jmenuje „date“, když to obsahuje object s datem a časem?

$datetime = $date->format('Y-m-d');

Proč se tohle jmenuje „datetime“, když to naopak obsahuje jen datum?

Na 5 řádcích je $datetime jednou ActiveRow, jednout datum, nikdy datum a čas.
To pak není divu, že nastavení defaultValue jednoho inputu řešíš 13 dní…

tak je to pojmenované blbě, ale to jsem zkoušel různě pojmenovávat aby se ta proměnná odlišila.Naštěstí se krom mě v tom snad paplat nikdo nebude.