Portál AbcLinuxu, 13. května 2025 20:10

Dotaz: Formát datumu a času v sql dotazu b PHP

19.11.2014 16:51 Orlando
Formát datumu a času v sql dotazu b PHP
Přečteno: 824×
Odpovědět | Admin
Ahoj všem. Kdysi jsem našel způsob, jak změnit přímo v sql dotazu formát sloupce datetime, hledám, hledám ale nemlžu najít to sprábké klíčové slovo :-( Poradí někdo? Ihmo: co použít při vkládání nového údaje pro ten sloupec datetime? NOW() ? Díky
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Tarmaq avatar 19.11.2014 18:43 Tarmaq | skóre: 39
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
vubec jsi nenapsal o jakou db se jedna, pro MySQL by snad melo byt funkcni reseni s funkci DATE_FORMAT().
Don't panic!
19.11.2014 20:28 Orlando
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Omluva, jedná se opravdu o mysql, díky moc. a to vložení nového datumu?
19.11.2014 21:01 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Nové datum vložíš takové, jaké potřebuješ a pokud potřebuješ fčil vložíš Now().

Možná by tě zajímal rozdíl:

SELECT NOW(), SLEEP(3), NOW();
vs.
SELECT SYSDATE(), SLEEP(3), SYSDATE();

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
19.11.2014 21:38 Orlando
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Díky, ano potřebuji to vložit fčijek :-D ale píše to, že neexistuje funkce NOW();
$sql = "INSERT INTO t (a, b, c, d) VALUES (:a, :b, :c, :d)";
$query = $this->db->prepare($sql);
$parameters = array(':a' => $a, ':b' => $b, ':c' => $c, ':d' => NOW());
19.11.2014 21:41 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
$sql = "INSERT INTO t (a, b, c, d) VALUES (:a, :b, :c, NOW())";
?
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
19.11.2014 21:50 Orlando
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Díky, hnet to idu vyzkůšat :-D

BTW: Když budu mít v POSTu formát '19.11 2014 10:10:10' jak to můžu updatovat do mysql, nemyslím sql dotaz ale jen ten datum, jde nějak použít třeba

$var = date('19.11 2014 10:10:10'); ? Díky
19.11.2014 21:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Nerozumím řeči tvého kmene.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
19.11.2014 22:36 Orlando
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Pokud budu potřebovat editovat datum v mysql a načtu data do formuláře, tak načtu datum v českém tvaru, ten opravím a potřebuji ho zase nějak překonvertovat do tvaru v jakém je uložen v mysql (sloupec je typu datetime). Je to lépe k pochopení ? Díky
20.11.2014 10:22 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP

Jenda ti už něco níže písnul, osobně reálná čísla měnu a datum/čas jsem vždy táhal přes nějaký vlastní třídu, (která obalila třeba i některé PHP-kové). Dříve jsem to měl součástí db-providera, kde existovali tři get/set klient/PHP/DB.

V jednoduchém případě jedu vždy přes ISO 8601 'YYYY-MM-DDThh:mm:ss' s tím, že někdy z různých důvodů vynechávám to 'T'. a pokud to lze, razím tezi, že i uživatel by si měl zvyknout na YYYY-MM-DD hh:mm:ss, protože tak se nezaměnitelně domluvém všichni, no a když to nelze, tak se holt musí šupačit tam a zpět, ale dělám to v aplikační vrstvě, ne v DB (i když ji případně využiji na ověření kdovíčeho).

To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
20.11.2014 10:24 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Sorry - oprava ne Jenda, ale Josef Kufner.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
Josef Kufner avatar 20.11.2014 00:14 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Pokud se bavíme o MySQL a časech v blízké budoucnosti i minulosti, nejlépe se hotí sloupec typu TIMESTAMP.

S tím však souvisí správné nastavení časových pásem. V PHP musíš mít nastaveno 'Europe/Prague' a v MySQL totéž. Aby to prošlo, je potřeba do MySQL naimportovat informace o nich. A rozhodně nenastavuj časové pásmo pomocí číselného offsetu.

Potom z a do MySQL můžeš předávat čas ve formátu dle ISO 8601. V PHP se pak hodí strtotime() a strftime(), přičemž čas budeš uchovávat v proměnné buď jako string, a nebo jako unixový timestamp.

Pro zobrazení času můžeš použít například:
echo strftime(_('%d. %m. %Y %H:%M'), strtotime($iso_string));
Pokud zadá uživatel datum do formuláře, nabízí se dvě možnosti: Buď ho dostaneš v ISO formátu (JS selector nebo HTML5 input typu datetime), nebo ho dostaneš v lokalizovaném tvaru. V prvním případě ho rovnou pošli do databáze, v tom druhém máš dvě možnosti: Spolehnout se na strtotime() nebo vzít formátovací řetězec a použít strptime(). Obvykle je strtotime() dostatečně schopné. Jakmile máš timestamp, je snadné ho dostat do MySQL:
$flupdo->where('timestamp_sloupec = ?',
    strftime('%Y-%m-%d %H:%M:%S', strtotime($_POST['timestamp_policko'])));
Ještě lepší je, když strtotime() a strftime() jsou součástí validace a formátování formuláře, takže z něj vždy leze validní ISO 8601 string. A v logice aplikace pak už s časem nijak nemanipuluješ a předáš ho databázi tak, jak je.
Hello world ! Segmentation fault (core dumped)
19.11.2014 21:39 Orlando
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
úklep: fčilejk :-D
20.11.2014 12:43 Orlando
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Odpovědět | | Sbalit | Link | Blokovat | Admin
Díky moc za velmi užitečné rady! Jinak jsem nahodou narazil na tohle

Převod řetězce na datum

Někdy je potřeba rychle naformátovat nějaký řetězec do jiné podoby. Můžeme mí datum ve formátu Wed, 12 Dec 2007 08:00:00 GMT. Přeformátování provedeme následujícím skriptem:

$date = "Wed, 12 Dec 2007 08:00:00 GMT";
$date = strtotime($date);
$date = StrFTime("%d.%c.%Y %H:%M:%S", $date);
//12.12.2007 08:00:00
Zdroj jsem našel zde, tak třeba se to někomu hodí ;-)
20.11.2014 12:45 Orlando
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Teď mne tak napadlo, doufám, že jsem neporušil nějaká autorská práva. Pokud ano, prosím admina o smazání ;-)
20.11.2014 13:04 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Tohle nefunguje. Nechápu, proč tam máš 3× stejnou proměnnou na levé straně. To pořád cpeš do jedné proměnné? Fuj.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
20.11.2014 13:34 Orlando
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Mě to tada funguje partádně, navíc já šetřím paměť, a proměnné nepřepisuju, jinak ten kód není můj, je to original co jsem sem pastnul..
20.11.2014 14:46 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Formát datumu a času v sql dotazu b PHP
Možná máš jinak nastavenou lokalizaci.

Místo čísla 12 bych dal jiné číslo, aby bylo jasně vidět, co je den a co je měsíc. Datum 12.12. se na testování funkčnosti vůbec nehodí. Když použiješ 10, tak hned vidíš, jestli se ti uloží 10. prosince nebo 12. října. Ze stringu "12.12." nevidíš nic.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.