04. januar 2003 - 01:47Der er
41 kommentarer og 1 løsning
formatering af unix_timestamp(now())
Hej Jeg har en base med news hvor der er et felt af typen datetime der hedder dato. i det har jeg lagt value unix_timestamp(now())
Når jeg trækker det ud igen ønsker jeg at have det stående på følgende måde:
13. Januar
hvis nyheden er ældre end 2 dage
Idag 14.45
hvis nyheden er fra idag
Igår 14.45
hvis nyheden er fra igår
og
13. januar 2002
hvis nyheden er fra sidste år
Jeg har rodet en del med date() osv men kan ikke få det til at makke ret. Hvis jeg med fordel bør gemme på en anden måden i basen, vil jeg også gerne høre om det. Mvh Thomas
De fleste virksomheder har efterhånden bevist, at AI virker.
Pilotprojekter leverer resultater. Medarbejdere bruger generative AI-værktøjer. Nye use cases dukker op på tværs af organisationen.
BTW: Ved ikke om der kan være nogle issues omkring at et unix-timestamp ikke måles på samme måde i MySQL vs. PHP - mener jeg tidligere har hørt om nogle problemer, men kan ikke huske hvilken platform det var på.
Hvis du gemmer tiden i Unix Epoch kan du styre hvad der skal stå ved dato med denne her: ------------- $monname = array('januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december'); $tidnu = time(); $databasetid = // Husk at sætte datoen fra databasen ind her i unix epoch format if (date("Y",$databasetid) != date("Y",$tidnu)) { // sidste år echo "".date("j",$databasetid).". ".$monname[date("n",$databasetid)-1] ." ". date("Y",$databasetid); } elseif (($databasetid > $tidnu - 24*60*60) && (date("w",$databasetid) == date("w",$tidnu))) { //Idag echo "Idag " . date("G:i",$databasetid); } elseif ($databasetid > $tidnu - 24*60*60 || (($databasetid > $tidnu - 48*60*60) && ((date("w",$databasetid) == date("w",$tidnu) -1) || ((date("w",$databasetid) == 6 && date("w",$tidnu) == 0))))) { //Igår echo "Igår " . date("G:i",$databasetid); } else { //I år men før i går echo "".date("j",$databasetid).". ".$monname[date("n",$databasetid)-1]; } -------------
ok så langt så godt. men hvordan laver jeg en variabel med dagen idag, som jeg kan sammenligne med den her, for at se om det er idag: $checkidag = date('d/m/Y',$row_tekst1['tid']); og hvordan laver jeg $checkigaar = date('d/m/Y',$row_tekst1['tid']); om til igaar? skal jeg så trække 1 dag i sekunder fra $row_tekst1['tid'] først??
ups glemte lige at refreshe.. jeg roder lige lidt med dit svar broegaard
Synes godt om
Slettet bruger
04. januar 2003 - 03:13#10
Indsæt i din tabel et unix_timestamp, og lad PHP regne dit datoformat ud eg. vha. nedenstående funktion:
<? function format_date($timestamp) { $now = time(); setlocale (LC_ALL, 'da_DK.ISO-8859-1');
# ikke samme aar # bemærk! dette check _skal_ vaere foerst da vi ellers laver fejl i de andre funktioner if (date('y', $timestamp) != date('y', $now)) return strftime("%d. %B %Y", $timestamp);
broegaard det ser jo ud til at det præcist det jeg mangler, men den laver parse error i denne linie: echo "".date("j",$databasetid).". ".$monname[date("n",$databasetid)-1] ." ". date("Y",$databasetid);
jeg må indrømme at jeg ikke ved om jeg har Unix Epoch format (!!) men det er en linux server og tiden er gemt i basen med now() og taget ud med "SELECT unix_timestamp(dato) as tid"
tak for de pæne ord. Jo, det er rigtigt der er lige smuttet en lille betingelse for meget ind. Men det havde ikkke revet nogen forskel på upputtet. Men det var en smutter. Min fejl.
jeg er rimlig ny inden for php så jeg kender ikke now() og den står ikke på php.net hvis det er unix epoch er det bare et tal lige nu er: 1041647891 så den skulle gerne komme med et 10 eller 9 cifret tal når du skriver echo $row_tekst1['tid']; hvad skriver den når du skriver echo $row_tekst1['tid'];
Jeg har lige opdaget en smutter mere. Ved års skifte ville den bare vise dato for f.eks d. 31 december når vi havde d. 1 januar. Så her er den en gang til: $monname = array('januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december'); $tidnu = time(); $databasetid = // Husk at sætte datoen fra databasen ind her i unix epoch format
if (($databasetid > $tidnu - 24*60*60) && (date("w",$databasetid) == date("w",$tidnu))) { //Idag echo "Idag " . date("G:i",$databasetid); } elseif ((($databasetid > $tidnu - 48*60*60) && ((date("w",$databasetid) == date("w",$tidnu) -1) || ((date("w",$databasetid) == 6 && date("w",$tidnu) == 0)))) { //Igår echo "Igår " . date("G:i",$databasetid); } elseif (date("Y",$databasetid) == date("Y",$tidnu)) { //I år men før i går echo date("j",$databasetid).". ".$monname[date("n",$databasetid)-1]; } else { // sidste år echo date("j",$databasetid).". ".$monname[date("n",$databasetid)-1] ." ". date("Y",$databasetid); }
Og en gang til. Der var kommet en parantes for meget med denne gang: ------------- $monname = array('januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'december'); $tidnu = time(); $databasetid = // Husk at sætte datoen fra databasen ind her i unix epoch format
if (($databasetid > $tidnu - 24*60*60) && (date("w",$databasetid) == date("w",$tidnu))) { //Idag echo "Idag " . date("G:i",$databasetid); } elseif (($databasetid > $tidnu - 48*60*60) && ((date("w",$databasetid) == date("w",$tidnu) -1) || ((date("w",$databasetid) == 6 && date("w",$tidnu) == 0)))) { //Igår echo "Igår " . date("G:i",$databasetid); } elseif (date("Y",$databasetid) == date("Y",$tidnu)) { //I år men før i går echo date("j",$databasetid).". ".$monname[date("n",$databasetid)-1]; } else { // sidste år echo date("j",$databasetid).". ".$monname[date("n",$databasetid)-1] ." ". date("Y",$databasetid); }
ja jeg er ved den nederste.. det er som om fejlen er i denne linie: if (($databasetid > $tidnu - 24*60*60) && (date("w",$databasetid) == date("w",$tidnu))) { (det er linie 29 og uanset hvad der kommer efter, er der fejl i linie 30)
Synes godt om
Slettet bruger
04. januar 2003 - 03:55#20
thomase: Prøv engang min funktion, nu er den der jo alligevel :)
Jeg må sige at jeg er temlig blank. Den virker fint her. Hvis du sætter $databasetid = time () - 60*60*24 så virker den fint. Det som om at det er inputet det er i vejen med men så er det selvfølgelig underligt at den kommer med fejlen der. Prøv mercur8's istedet for jeg tror ikke jeg kommer meget længere med dette her nu
$timestamp = $row_tekst1['tid']; function format_date($timestamp) { $now = time();
giver den parse error i linie 3 (!!) $row_tekst1['tid']; echoer fint nok med 1041644236
Synes godt om
Slettet bruger
04. januar 2003 - 04:19#28
thomase: Det er slet ikke dér du skal rette.
Du skal lade hele funktionen være som den er.
Det eneste du skal ændre er nederste linje. Den skal ændres til: echo ($date = format_date($row_tekst1['tid'])) ? $date : "Fejl i timestamp";
Synes godt om
Slettet bruger
04. januar 2003 - 04:26#29
Iøvrigt det er ikke i nogle af vores (broegaard eller min) koder, der er parse errors. Så det er altså en fejl, du har i den kode, du har ovenfor vores. Sikkert der hvor du trækker dit timestamp ud af databasen.
Er du i tvivl så sov nogle timer og kig på det igen. Så finder du sikkert din fejl :)
broegaards script indeholder iøvrigt regnefejl, efter han har byttet rundt på rækkefølgen af sine løkker mv.
ja det så jeg også.. er ved at blive sent ;) men jeg kan stadig ikke parse...
function format_date($timestamp) { $now = time(); setlocale (LC_ALL, 'da_DK.ISO-8859-1');
# ikke samme aar # bemærk! dette check _skal_ vaere foerst da vi ellers laver fejl i de andre funktioner if (date('y', $timestamp) != date('y', $now)) return strftime("%d. %B %Y", $timestamp);
mysql_select_db($database_SQL, $SQL); $query_tekst1 = "SELECT unix_timestamp(dato) as tid, tekst, linktekst, link, id, overskrift FROM mnlnews WHERE picnavn='intet' ORDER BY id DESC limit $fra,$pr_side"; $tekst1 = mysql_query($query_tekst1, $SQL) or die(mysql_error()); $row_tekst1 = mysql_fetch_assoc($tekst1); $totalRows_tekst1 = mysql_num_rows($tekst1); ?> <?php function format_date($timestamp) { $now = time(); setlocale (LC_ALL, 'da_DK.ISO-8859-1');
# ikke samme aar # bemærk! dette check _skal_ vaere foerst da vi ellers laver fejl i de andre funktioner if (date('y', $timestamp) != date('y', $now)) return strftime("%d. %B %Y", $timestamp);
jeg lavede de forskellige værdier om til variable som jeg indsatte isteder for at gøre det mere overskueligt... da detr så virkede satte jeg værdierne tilbage igen, også virkede det... mærkeligt det er vist kun i første elseif jeg har ændret på parenteserne , men i den første der gav fejl før, kan jeg ikke se hvad jeg har ændret... kan der gå noget galt med mellemrum eller noget ved copy/paste? anyway det virker nu.. HURRA
men er der en fejl i? jeg har kun testet bagud i tiden, og er ikke stødt på noget??
Fejlen er kun hvis database tiden er en gang i frem tiden. Det er selvfølgelig en fejl men jeg går ud fra at tiden fra databasen er tidspunktet for hvornår en post el. lign. er blevet postet og derfor vil databasetiden altid være mindre end $tidnu og der for vil det ikke give problemer
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.