Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP Date Funktion (https://www.delphipraxis.net/142527-php-date-funktion.html)

Delphi-Phil 29. Okt 2009 21:56


PHP Date Funktion
 
Hallo Zusammen,
folgende Frage:

Ich lasse per PHP Funktion die nächsten x Tage ausgeben (Hier im Beispiel 6). Jetzt soll zusätzlich dazu eine abfrage gemacht werden, die folgendes macht:
Gebe zu jedem ermittelten Tag, alle Datensätze aus Tabelle yx aus, wo das Feld 'datum' dem ermittelten Datum entspricht. Die ermittelten Datensäte sollen dann unter das Datum geschrieben werden.

Beispiel:

29.10.2009
Datensatz1
Datensatz8898
30.10.2009
Datensatz98
31.10.2009
Datensatz675
01.10.2009
Datensatz12
Datensatz76
02.10.2009
Datensatz1232
03.10.2009
(hier ist mal kein Datensatz, auch das muss gehen. Es soll dann einfach leer bleiben!)


Code:
<?php

$heute = time();
echo 'Die n&auml;chsten 6 Tage:
';
for($i=0; $i<6; $i++)
{
 echo '<li class="group">' .date('d.m.Y',mktime(0,0,0, date('m',$heute), date('d',$heute)+$i, date('Y',$heute))).'';
}

?>

DeddyH 29. Okt 2009 22:07

Re: PHP Date Funktion
 
Was meinst Du denn mit Datensatz? Geht es hier um MySQL?

jfheins 29. Okt 2009 22:09

Re: PHP Date Funktion
 
Und wo ist jetzt das Problem?

Btw.: Ich ätte es ja so in etwa gemacht:
Code:
date('d.m.Y', time() + $i * 3600 * 24);

Delphi-Phil 29. Okt 2009 22:09

Re: PHP Date Funktion
 
ups! Sry das habe ich ganz vergessen zu erwähnen, Im Eifer des Gefechts!

JA es geht um MySql!

DeddyH 29. Okt 2009 22:22

Re: PHP Date Funktion
 
Dann ist das aber die falsche Sparte. Du brauchst also eine Abfrage der Datensätze der nächsten 6 Tage, hab ich das richtig verstanden? Mal aus dem Hut:
SQL-Code:
SELECT <Feldliste>
FROM Tabelle
WHERE Datumsfeld BETWEEN DATE_ADD(CURRENT_DATE,INTERVAL 1 DAY) AND DATE_ADD(CURRENT_DATE, INTERVAL 6 DAY)

Delphi-Phil 29. Okt 2009 22:25

Re: PHP Date Funktion
 
okay, dass schaut gut aus!

Aber wie kann ich es jetzt grupieren so wie in meinem Beispiel? Hast du eine Idee?

DeddyH 29. Okt 2009 22:28

Re: PHP Date Funktion
 
Gruppierung ohne Aggregatfunktion macht ja keinen wirklichen Sinn (obwohl MySQL das IIRC sogar unterstützt). Ich würde das wahrscheinlich eher auf der PHP-Seite lösen.

Delphi-Phil 29. Okt 2009 22:31

Re: PHP Date Funktion
 
kannst du mir da mal ein beispiel zeigen? Bitte!

DeddyH 29. Okt 2009 22:38

Re: PHP Date Funktion
 
Lieber nicht, meine PHP-Kenntnisse sind einfach zu eingerostet. Aber Du musst doch lediglich das morgige Datum ermitteln und mit dem Datum aus der DB vergleichen. Wenn sich das DB-Datum ändert, setzt Du Dein gemerktes Datum auf das DB-Datum und gibst es aus. Dabei können zwar noch Lücken entstehen, aber das sollte ja auch keine große Sache sein, dann zählst Du das Datum halt so lange hoch und gibst es aus, bis es dem aus der DB entspricht. Für diese Vorgehensweise ist allerdings eine Sortierung in der Abfrage nötig, die ich oben vergessen habe.

[edit] Einfachere, aber unschöne Variante: Per PHP das Datum ermitteln und je Tag eine Abfrage absetzen. Aber das würde ich nur dann tun, wenn alles andere versagt. [/edit]

Delphi-Phil 29. Okt 2009 23:12

Re: PHP Date Funktion
 
so sieht der php code aus:

Die Daten werden erfolgreich und richtig berechnet. Nur steht noch nichts aus der DB drin!

Habt Ihr eine IDEE??

Code:
<?php
$j = date('Y');
$m = date('m');
$d = date('d');
echo 'Die n&auml;chsten 6 Tage:
';
for($i=0; $i<6; $i++)
{
 echo '<li class="group">' .$morgen = date('d.m.Y',mktime(0,0,0,$m,$d+$i,$j)).'</div>';
   
   $result = mysql_query("SELECT * FROM menue where datum = '$morgen'");
   while($row = mysql_fetch_array($result))
      
      {
      echo "[*]";
        echo "<a href=\"menue.php?id=". $row['id'] ."\">". $row['name'] ."</a>";
        echo "";
        }   
}
?>

DeddyH 29. Okt 2009 23:17

Re: PHP Date Funktion
 
Ich denke, das Datumsformat der Abfrage stimmt nicht, das müsste 'Y-m-d' sein.

Delphi-Phil 29. Okt 2009 23:26

Re: PHP Date Funktion
 
danke für den tipp, der war schonmal nicht schlecht! Jetzt wird das Datum mit dem Echo genua so ausgegeben wie es in der DB steht.

Jedoch werden immer noch keine Daten gefunden. Hier nochmal der aktuelle Code:

Ich habe das gerade mal mit PHP Edit debuggt. Das komische ist, er macht die for Schliefe ganz ordentlich bis per echo alle Datumsangaben ausgegeben sind aber er spring nicht einmal in die while schleife rein. WARUM??

Code:
<?php
$j = date('Y');
$m = date('m');
$d = date('d');
echo 'Die n&auml;chsten 6 Tage:
';
for($i=0; $i<6; $i++)
{
 echo '<li class="group">' .$morgen = date('Y.m.d',mktime(0,0,0,$m,$d+$i,$j)).'</div>';

   $result = mysql_query("SELECT * FROM menue where datum = '$morgen'");
   while($row = mysql_fetch_array($result))

      {
      echo "[*]";
        echo "<a href=\"menue.php?id=". $row['id'] ."\">". $row['name'] ."</a>";
        echo "";
        }
}
?>

DeddyH 29. Okt 2009 23:29

Re: PHP Date Funktion
 
Lass Dir doch das erzeugte SQL einmal ausgeben und gib das dann in phpMyAdmin ein. Irgendetwas scheint ja immer noch nicht zu stimmen.

Delphi-Phil 29. Okt 2009 23:35

Re: PHP Date Funktion
 
das kommt raus:

Zitat:

Die nächsten 6 Tage:

2009.10.30
Query Ausgabe: Resource id #2
2009.10.31
Query Ausgabe: Resource id #3
2009.11.01
Query Ausgabe: Resource id #4
2009.11.02
Query Ausgabe: Resource id #5
2009.11.03
Query Ausgabe: Resource id #6
2009.11.04
Query Ausgabe: Resource id #7

DeddyH 29. Okt 2009 23:39

Re: PHP Date Funktion
 
Ich meinte die generierte SQL-Abfrage. Was sagt das Script denn hierbei?
Code:
echo "SELECT * FROM menue where datum = '$morgen'";

Delphi-Phil 29. Okt 2009 23:43

Re: PHP Date Funktion
 
das kommt raus:

Ist doch eigentlich super oder?

Zitat:

Die nächsten 6 Tage:

2009.10.30
SELECT * FROM menue where datum = '2009.10.30
'
2009.10.31
SELECT * FROM menue where datum = '2009.10.31
'
2009.11.01
SELECT * FROM menue where datum = '2009.11.01
'
2009.11.02
SELECT * FROM menue where datum = '2009.11.02
'
2009.11.03
SELECT * FROM menue where datum = '2009.11.03
'
2009.11.04
SELECT * FROM menue where datum = '2009.11.04
'

DeddyH 29. Okt 2009 23:45

Re: PHP Date Funktion
 
Ersetz einmal die Punkte durch Striche. Und wo kommt der Zeilenumbruch her?

Delphi-Phil 29. Okt 2009 23:49

Re: PHP Date Funktion
 
der zeilenumbruch kommt vom debugger, ich habe es nochmal im normalen browser angesegen, da ist alles richtig.
ich glaube durch striche ersetzten ist falsch, ich habe extra mal in die db ein string geschrieben mit punkten der genau so das datum beinhaltet.
ich habe die vermutung, dass irgendwas an dem php syntay falsch ist und er desswegen nicht in die while schleife springt!

DeddyH 29. Okt 2009 23:55

Re: PHP Date Funktion
 
Wieso nutzt Du nicht einfach die DATE_ADD-Funktion von MySQL, dann muss man sich um die korrekte Schreibweise doch keine Gedanken mehr machen?
Code:
for ($i = 1; $i < 7; $i++){
  $result = mysql_query("SELECT * FROM menue where datum = DATE_ADD(CURRENT_DATE, INTERVAL $i DAY)");
  ...}

Delphi-Phil 30. Okt 2009 00:07

Re: PHP Date Funktion
 
JUUUHUUUU!

Das war der TIPP des Tages, einfach die MySql Funktion genommen und es geht. Jetzt geht er auch in die While Schleife und macht was er soll!!
GEIL

Code:
<?php
$j = date('Y');
$m = date('m');
$d = date('d');
echo 'Die n&auml;chsten 6 Tage:
';
for($i=0; $i<6; $i++)
{
 echo '<li class="group">' .$morgen = date('d.m.Y',mktime(0,0,0,$m,$d+$i,$j)).'</div>';
   $result = mysql_query("SELECT * FROM menue where datum = DATE_ADD(CURRENT_DATE, INTERVAL $i DAY)");
      
   while($row = mysql_fetch_array($result))

      {
      echo "[*]";
        echo "<a href=\"menue.php?id=". $row['id'] ."\">". $row['name'] ."</a>";
        echo "";
        }
}
?>

Delphi-Phil 30. Okt 2009 00:11

Re: PHP Date Funktion
 
Jetzt aber noch eine Frage:

Jetzt werden mir ja immer die Datumswert angezeigt. Kann ich auch noch die Tage dazu ermitteln??

DeddyH 30. Okt 2009 10:02

Re: PHP Date Funktion
 
Die Frage versteh ich nicht. Welche Tage meinst Du?

Delphi-Phil 30. Okt 2009 10:13

Re: PHP Date Funktion
 
Ich meinte den Name des Tages wie Montag, Dienstag usw.

So das hinter dem Datum von Heute Freitag steht!

DeddyH 30. Okt 2009 10:16

Re: PHP Date Funktion
 
Schau einmal hier: http://php-faq.de/q-datum-deutsch.html

Delphi-Phil 30. Okt 2009 10:37

Re: PHP Date Funktion
 
aber mit der funktion kann ich doch nicht für ein berechnetes datum einen wochentag ermitteln... oder doch!?!?

DeddyH 30. Okt 2009 10:42

Re: PHP Date Funktion
 
Versuch es doch einfach mit date() statt strftime(), IMO müsste das funktionieren.

Delphi-Phil 30. Okt 2009 10:57

Re: PHP Date Funktion
 
Ich habe es mal so gemacht, es stimmt aber noch nicht so recht...:

[code]<?php
$j = date('Y');
$m = date('m');
$d = date('d');
echo 'Die n&auml;chsten 6 Tage:
';
for($i=0; $i<6; $i++)
{
echo '<li class="group">' .$morgen = date('d.m.Y',mktime(0,0,0,$m,$d+$i,$j)).'</div>';

echo date('%A, %d. %B %Y', 1009926000);
// Ausgabe: Wednesday, 02. January 2002

setlocale(LC_TIME, 'German_Germany');
echo strftime('%A, %d. %B %Y', 1009926000);
// Ausgabe: Mittwoch, 02. Januar 2002


$result = mysql_query("SELECT * FROM menue where datum = DATE_ADD(CURRENT_DATE, INTERVAL $i DAY)");

while($row = mysql_fetch_array($result))

{
echo "[*]";
echo "<a href=\"menue.php?id=". $row['id'] ."\">". $row['name'] ."</a>";
echo "";
}
}
?>

Und hier ist die Ausgabe:

Zitat:

Die nächsten 6 Tage:

30.10.2009
%AM, %02. %000 %2002Mittwoch, 02. Januar 2002
Rumpsteak
31.10.2009
%AM, %02. %000 %2002Mittwoch, 02. Januar 2002
01.11.2009
%AM, %02. %000 %2002Mittwoch, 02. Januar 2002
Broccoliröstlinge
02.11.2009
%AM, %02. %000 %2002Mittwoch, 02. Januar 2002
03.11.2009
%AM, %02. %000 %2002Mittwoch, 02. Januar 2002
Pommes mit Wurst
Test12133
04.11.2009
%AM, %02. %000 %2002Mittwoch, 02. Januar 2002

DeddyH 30. Okt 2009 11:11

Re: PHP Date Funktion
 
Laut http://php.net/manual/de/function.date.php müsste der Befehl so lauten (nach dem setlocale):
Code:
echo date("l, d.m.Y");
Da noch den jeweiligen Tag dazuaddieren und es sollte passen.

Delphi-Phil 30. Okt 2009 11:43

Re: PHP Date Funktion
 
joa, sieht nicht schlecht aus. Aber wie soll ich denn den Tag dazu addieren?? Ich habe ja überall nur datumzahlen...

DeddyH 30. Okt 2009 12:09

Re: PHP Date Funktion
 
Das hast Du doch bereits. Verstehst Du Deinen eigenen Code nicht?
Code:
echo '<li class="group">' .$morgen = date('l, d.m.Y',mktime(0,0,0,$m,$d+$i,$j)).'</div>';

Delphi-Phil 30. Okt 2009 12:21

Re: PHP Date Funktion
 
ja ich glaube wirklich, ich blick da nicht mehr so voll durch... :wink:

Jetzt geht es natürlich, nur ist der Tag noch auf Englisch, mal sehen wie ich es auf Deutsch umwandeln lassen kann...!

DeddyH 30. Okt 2009 12:32

Re: PHP Date Funktion
 
Das sollte doch mit einem vorherigen Aufruf von setlocale() gehen, stand zumindest in meinem ersten Link.

Delphi-Phil 30. Okt 2009 12:39

Re: PHP Date Funktion
 
joa das dachte ich auch!

aber wenn ich das hier aufrufe tut sich nichts:

Code:
setlocale(LC_TIME, 'German_Germany');

DeddyH 30. Okt 2009 12:41

Re: PHP Date Funktion
 
Ist das denn ein Windows-Server?

Delphi-Phil 30. Okt 2009 12:44

Re: PHP Date Funktion
 
ja, ist eine xampp installation auf win xp!

DeddyH 30. Okt 2009 12:47

Re: PHP Date Funktion
 
Ah, sry, das hatte ich überlesen:
Zitat:

Die Einstellung für die Kategorie LC_TIME wirkt sich nur auf die Ausgabe von strftime(), nicht jedoch auf date() aus.
Na denn, hier eine weitere Möglichkeit: http://www.php.de/php-tipps-2004/481...bestimmen.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz