Timestamp Problem

  • Themenstarter Themenstarter starfoxfs
  • Beginndatum Beginndatum
S

starfoxfs

Hi zusammen,

Ich möchte einen timestamp in Monat und Jahr splitten und dann immer den 31 des Monats und Jahres daraus machen.

Das funktioniert soweit auch ganz gut:

PHP:
$jahr = date("Y", $time);
$monat = date("m", $time);

$newstime = "31-$monat-$jahr";

$datum = explode ("-", $newstime);

$newstimes = mktime (0, 0, 0, $datum[1], $datum[0], $datum[2]);

$time ist ein timestamp der mein richtigen Monat und das richtige Jahr enthält.

Nun mein Problem hierbei ist es das nicht wirklich der 31. des Monats rauskommt am Ende sondern nur der 30te

Sprich sollte sein 2009-03-31 22:00:00 ist aber 2009-03-30 22:00:00
Warum ?
 
Hi,

Wie soll das rauskommen:
Code:
2009-03-30 22:00:00

Laut deinem Script kommt da immer was mit Mitternacht (00:00:00) raus, da du mktime keine Daten für die Sekunden übergibst.

Kannst du mal bitte den Timestamp posten, bei dem dieser Fehler auftritt?
 
Mein Timestamp für die Variable $time wäre 1236264122 laut http://elmar-eigner.de/tstamps.html wäre das dann

2009-03-05 14:42:02

daraus möchte ich dann einen Timestamp erzeugen mit dem Script von:

2009-03-01 00:00:00

und

2009-03-31 00:00:00

damit ich die News aus meinem Newsarchiv ordentlich auslesen kann die für den jeweiligen Monat gelten.
 
Zuletzt bearbeitet von einem Moderator:
Hi,

das geht aber um einiges einfacher und schöner, als das was du bisher versucht hast.
Genauer gesagt kannst du das direkt im Sql-Statement machen.

Ich würde aber sagen, du versuchst es erstmal selbst.
Hier sind auf jedenfall mal die Datumsfunktionen von MySql.
 
Moin,

wenn dein Newsarchiv eine DB ist, wovon ich mal ausgehe, dann lasse doch diese umständliche und obendrein nicht exakte Berechnung sein(gibt schliesslich Monate mit weniger als 31 Tagen).
Gebe Monat und Jahr einfach als Kriterium in deinem Query an, DBs kennen auch Datumsfunktionen und können direkt mit den in der DB gespeicherten Werten arbeiten :)

<edit> Pöööhser Loomes :suspekt:</edit>
 
Das hab ich schon probiert aber irgendwie weiß ich nicht wie ich es hinbekommen soll.
Die Datum und Uhrzeit Funktionen hab ich auch schonmal durchgelesen.

Hiermit lese ich aus wann die News geschrieben wurden (Monat und Jahr) darauf soll dann ein Link gelegt werden der dann die einzelnen News anzeigt.

PHP:
$sql = "SELECT time FROM ".$sqltab15." WHERE boardID = '96' GROUP BY MONTH(FROM_UNIXTIME(time)), YEAR(FROM_UNIXTIME(time)) ORDER BY time DESC";  
$result = $db->query($sql);
while ($news = $db->fetcharray($result))    {
	
	
?>

    <tr>
    <td bgcolor="#222222" width="50%" align="left">
    <ul>
	<li><a href="?page=archiv&amp;show=detail&amp;time=<?php echo $news["time"]?>"><?php echo strftime("%B %Y", $news["time"]); ?></a></li>
    </ul>
    </td>
    </tr>


<?php
}
?>

So hab ich dann weiter gemacht aber das funktioniert wie gesagt nicht wirklich:

PHP:
######### timestamp in Datum umwandeln das verarbeitet werden kann ####
$jahr = date("Y", $time);
$monat = date("m", $time);


$erste_news = "01-$monat-$jahr";
$letzte_news = "32-$monat-$jahr";

$datum = explode ("-", $erste_news);
$datum2 = explode ("-", $letzte_news);

$erste_news_monat_jahr = mktime (0, 0, 0, $datum[1], $datum[0], $datum[2]);
$letzte_news_monat_jahr = mktime (0, 0, 0, $datum2[1], $datum2[0], $datum2[2]);
########### -->>

$sql = "SELECT time, topic FROM ".$sqltab15." WHERE boardID = '96' AND time BETWEEN '$erste_news_monat_jahr' AND '$letzte_news_monat_jahr'";  
$result = $db->query($sql);
while ($news = $db->fetcharray($result))    {

echo "" .$news["topic"]. "<br />";

}
 
Hi,

wenn Du doch offensichtlich in der Lage bist, die Datums- und Zeitfunktionen zu benutzen, warum tust Du es in der zweiten Abfrage (bestimmten Monat auswählen) denn dann nicht auch? Jahr und Monat hast Du aus dem übergebenen Timestamp errechnet (Du könntest hier auch in dem Link Monat und Jahr übergeben, indem Du in der ersten Abfrage gleich den Monat und das Jahr ausliest und nicht den Timestamp).

Dann lass doch das Gefrickel mit BETWEEN und evtl. falschen Werten und wähle alle Datensätze mit MONTH(timestamp) = $monat und YEAR(timestamp) = $jahr aus. Wo ist das Problem?

LG
 
Habe ich so schon ausprobiert:

PHP:
######### timestamp in Datum umwandeln das verarbeitet werden kann ####
$jahr = date("Y", $time);
$monat = date("m", $time);
## -->>

$sql = "SELECT time, topic FROM ".$sqltab15." WHERE boardID = '96' AND MONTH(time) = '$monat' AND YEAR(time) = '$jahr'";  
$result = $db->query($sql);
while ($news = $db->fetcharray($result))    {

echo "" .$news["topic"]. "<br />";

}

Nur angezeigt wird nichts :(

$time ist in meinem Beispiel jetzt 1236264122 entspricht 2009-03-05 14:42:02 da wurde die News geschrieben.
 
Hat sich erledigt :rolleyes: ich hab den Fehler gefunden, manchmal hat man eben ein Brett vorm Kopf xD

so musses aussehen dann gehts :

PHP:
######### timestamp in Datum umwandeln das verarbeitet werden kann ####
$jahr = date("Y", $time);
$monat = date("m", $time);
## -->>


$sql = "SELECT time, topic FROM ".$sqltab15." WHERE boardID = '96' AND MONTH(FROM_UNIXTIME(time)) = '$monat' AND YEAR(FROM_UNIXTIME(time)) = '$jahr'";  
$result = $db->query($sql);
while ($news = $db->fetcharray($result))    {

echo "" .$news["topic"]. "<br />";

}

LG, und danke euch allen für die Hilfe :)
 
Zurück