Gå til innhold

Hvorfor får jeg en 1970-dato ved norsk dat-konv.?


Anbefalte innlegg

Skrevet

Denne koden gjør at jeg får datoen "torsdag 01. januar 1970" som output... Det øvrige stemmer nok, siden time() istedet for $tid gir dagens dato.

 

Det jeg altså skal ha er datoen som er lagret som timestamp med navnet "tid" i databasen ut med norsk månedsnavn...

 

Noen som kan fortelle hvordan jeg får ut dette?

 

<?php


$res = mysql_query("SELECT * FROM news1 WHERE kategori=04 ORDER BY tid DESC limit 1");

while($row = mysql_fetch_assoc($res)){

setlocale(LC_ALL, 'no_NO.ISO8859-1');

echo "<a href='news.php?id=".$row['id']."'>".$row['tid']."</a><br><br>";
echo strftime ("%A %d. %B %Y", $tid);
}
?>

Videoannonse
Annonse
Skrevet

Datoen er fra i går! Eller som det står i databasen i timestamp-format: 20041002005400

 

Er det mer riktig at jeg skal bruke setlocale() da...?

Skrevet

Det er ikke korrket format på datoen, ta en kikk på mysql funksjonen UNIX_TIMESTAMP()

 

f.eks.

$res = mysql_query("SELECT *, UNIX_TIMESTAMP(tid) AS tid FROM news1 WHERE kategori=04 ORDER BY tid DESC limit 1");

Skrevet (endret)

Hei igjen!

 

Takk for svar.

 

Jeg tok en kikk på denne, og implementerte den i stedet. Men jeg får fremdeles 1. januar 1970 som output der jeg vil ha månedsnavnet fra nyheten på norsk format...

 

For å teste litt satte jeg inn både den originale linja mi, strftime time() og med $tid.

 

<?php

$res = mysql_query("SELECT *, FROM_UNIXTIME(UNIX_TIMESTAMP(), ('%e.%m.%Y')) AS tid FROM news1 WHERE kategori=04 ORDER BY tid DESC limit 1");

while($row = mysql_fetch_assoc($res)){

setlocale(LC_ALL, 'no_NO.ISO8859-1');

echo "<a href='/news.php?id=".$row['id']."'>".$row['tid']."</a><br>";
echo strftime ("%A %d. %B %Y", $tid);
echo strftime ("%A %d. %B %Y", time());
}
?>

 

Dette gir denne outputen:

 

4.10.2004

torsdag 01. januar 1970

mandag 04. oktober 2004

 

Det er altså den i midten som er problemet. Jeg vil den øverste linja - 4.10.2004 - på formen 4. oktober 2004.

 

Det hjelper forøvrig ikke å sette inn %B i stedet for %m i UNIX_TIMESTAMP() i SELECT. Den bare printes som B...

 

EDIT: Nå oppdager jeg i ettertid at denne funksjonen jo slett ikke henter datoen fra databasen, så jeg måtte gå tilbake til date_format!!

Endret av Glenn'ern
Skrevet

Variablen $tid inneholder ingenting, derfor blir 0 sendt inn i funksjonen. Noe som gir 1.januar 1970 (starten på unixtime).

 

Bytt ut:

echo strftime ("%A %d. %B %Y", $tid);

 

med

 

echo strftime ("%A %d. %B %Y", $row['tid']);

Skrevet (endret)

christt:

 

Nå begynner jeg bli frustrert her.

 

Du mener sånn ikke sant:

<?php

$res = mysql_query("SELECT *, date_format(tid, '%e.%m.%Y') as tid FROM news1 WHERE kategori=04 ORDER BY tid DESC limit 1");

while($row = mysql_fetch_assoc($res)){

setlocale(LC_ALL, 'no_NO.ISO8859-1');

echo "<a href='/news.php?id=".$row['id']."'>".$row['tid']."</a><br>";
echo strftime ("%A %d. %B %Y", $row['tid']);
echo strftime ("%A %d. %B %Y", time());
}
?>

 

Ikke for å svare uhøflig, men tror du ikke jeg har prøvd det?

 

Har prøvd $row['tid'] og ".$row['tid']." og '$row['tid']' og $row["tid"].. Du skjønner tegninga. 1. januar 1970 på alle sammen... :mad:

 

<?php

$res = mysql_query("SELECT *, date_format(tid, '%e.%m.%Y') as tid FROM news1 WHERE kategori=04 ORDER BY tid DESC limit 1");

while($row = mysql_fetch_assoc($res)){

setlocale(LC_ALL, 'no_NO.ISO8859-1');

echo "<a href='/news.php?id=".$row['id']."'>".$row['tid']."</a><br>";
echo strftime ("%A %d. %B %Y", $row['tid']);
echo strftime ("%A %d. %B %Y", $row[tid]);
echo strftime ("%A %d. %B %Y", $row["tid"]);

}
?>

 

gir

 

3.10.2004

torsdag 01. januar 1970torsdag 01. januar 1970torsdag 01. januar 1970

 

PS: Jeg måtte forlate UNIX_TIMESTAMP da den bare hentet dagens dato - jeg fikk ikke en gang datoen i databsen på det "feile" formatet.

Endret av Glenn'ern
Skrevet

igjen, har du sett på mysql sin date_format funksjon?

 

ditt "tid" felt er da en mysqldato, er det ikke det? det vises som et tall som gir overflow og dermed 0 som epoch tid.

Skrevet

Som Torbjørn sier, så er mysql sin datefunksjon den beste løsningen her. Vil anbefale deg å sette inn NOW() i tid når du setter inn datoen. Også bytter du om på tid til date (husker ikke hva det het). Så kan du heller formatere datoen når du henter ut tiden.

Skrevet (endret)

Yep. "tid" er allerede satt som timestamp i databasen. Den setter også alltid Now(), så problemet ligger nok ikke der heller...

 

Fra structure:

Field Type Null Default

tid timestamp(14) Yes NULL

Endret av Glenn'ern
Skrevet

Siden han ønsker navnene på norsk så kan det være lurt å beholde løsningen han allerede har.

 

Bruk da fortsatt UNIX_TIMESTAMP(), men ikke på den måten du har gjort. Bruk heller eksempelet jeg skrev tidligere. Hvis ikke det fungerer så kjør kun denne: "SELECT UNIX_TIMESTAMP(tid) FROM news1 WHERE kategori=04 ORDER BY tid DESC limit 1" - og post variabelen her.

Skrevet (endret)

Helt rått, O Store Spørsmålstegn!

 

Jeg jobbet videre med den linja du kom med nå, og nuh funker det.

 

Jeg legger ut koden som virker for future reference, som det heter.

 

 

<?php
$res = mysql_query("SELECT *, UNIX_TIMESTAMP(tid) AS tid FROM news1 WHERE kategori=04 ORDER BY tid DESC limit 1");
setlocale(LC_ALL, 'no_NO.ISO8859-1');

while($row = mysql_fetch_assoc($res)){

echo "<a href='/news.php?id=".$row['id']."'>";
echo strftime ("%A %d. %B %Y", $row[tid]);
echo "</a><br>";
}
?>

 

Jeg lurer på om det kan han noe med at jeg flyttet setlocale(LC_ALL, 'no_NO.ISO8859-1'); litt opp også.....?

Endret av Glenn'ern

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...