Nezobrazuje se mi datum ale dd.mm.r
- vanaveno
- Člen | 144
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
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
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
, tedyrrrr-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 ukazujedd.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
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
, tedyrrrr-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
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
, tedyrrrr-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“
- Kamil Valenta
- Člen | 758
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.
- Kamil Valenta
- Člen | 758
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
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
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
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
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
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');
}
?>
- vanaveno
- Člen | 144
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;
- vanaveno
- Člen | 144
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
- vanaveno
- Člen | 144
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
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
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.