php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.10.2005, 13:29  
Gast
 
Beiträge: n/a
Standard Wochentage ausgeben

Hallo liebe com,

wie kann ich es in PHP realisieren, die Wochentage auzugeben welche innerhalb einer Zeitspanne liegen? Die Zeitspanne wird durch zwei date
Formate (date1 - date2) aus der DB definiert.

So ungefär: echo alle date('w') zwischen date1 und date2
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 28.10.2005, 13:33  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich mach das meistens so, dass ich die beiden Daten (Datums) ins Unix-Format wandle, wenn sie das nicht eh schon sind und dann so fortfahre:

PHP-Code:
<?php
$weekday 
= array("Sonntag""Montag", ..., "Samstag");
for (
$i $startDate$i <= $endDate$i += 24*60*60) {
  print 
$weekday[date('w'$i)] . '
'
;
}
?>
Wobei es auch die Möglichkeit mit set_locale automatisch die Wochentag-Namen zu holen. Dazu siehe Manual.
Zergling-new ist offline  
Alt 29.10.2005, 10:39  
Gast
 
Beiträge: n/a
Standard

Ich würde das erstmal in einen Timestamp umwandeln mittels der Funktion mktime() den Starttag ermitteln und dann bis zum Ende durchlaufen.

Also das Datum zerlegen in seine Einzelheiten Tag Monat Jahr

PHP-Code:
<?php
$date1 
explode(".","11.11.2005");
$date2 explode(".","24.12.2005");

$date1mktime(0,0,0,$date1[1],$date1[0],$date1[2]);
// das ist unser Starttag Faschingsbeginn
$date2 mktime(0,0,0,$date2[1],$date2[0],$date2[2]);
//das ist der letzte Tag Weihnachten

setlocale(LC_TIME"ge","de_DE");

while(
$date1 <= $date2){
   echo 
strftime("%A" $date1)."
"
;
   
$date1 += 3600*24;
}
?>
 
Alt 29.10.2005, 22:31  
Gast
 
Beiträge: n/a
Standard

Hallo,

und danke bisher. Beide Scripte funktionieren. Jedoch wird bei den benutzten Eigaben z.B.

$date1 29.10.2005
$date2 01.11.2005

der Sonntag zweimal ausgegeben.

1130536800 //Umgewandelter UNIX-Timestamp von $date1
1130799600 //Umgewandelter UNIX-Timestamp von $date2

@Script von Zergling und Fips
Samstag
Sonntag
Sonntag
Montag

Abgesehen davon, das mir die Ausgaben reichen. Woran liegt das und wie kann ich das abstellen?

MfG
 
Alt 29.10.2005, 23:03  
Gast
 
Beiträge: n/a
Standard

Würde ich halb und halb von Mysql und PHP berrechnen/liefern lassen
PHP-Code:
<?php
// query: SELECT date1, DATEDIFF(date1,date2) as anzahl FROM ...
// $row = mysql_fetch_array($result);
$row = array(); $row['date1'] = '2005-10-26'$row['anzahl'] = '7';


$dStart explode('-'$row['date1']);

for(
$i=0$i<$row['anzahl']; $i++) {
    
$cDate mktime(1,0,0$dStart[1], $dStart[2]+$i$dStart[0]);
    echo 
date('d.m.Y (D)'$cDate), "
\n"
;
}
?>
 
Alt 30.10.2005, 00:18  
Gast
 
Beiträge: n/a
Standard

genau da liegt mein Problem.

Ich kann wohl nur auf PHP zurückgreifen, da es in mysql keinen Befehl gibt, der die Wochentage zwischen date1 und date2 berechnen/ausgeben kann.

Mal zum Sachverhalt:
Ich bin gerade an einem Event Kalender bei und dort gibt es einmalige und mehrmalige Events. Die Zeitspanne der Einmaligen wird mit date1 - date1 und die mehrmaligen mit date1 - date2 eingetragen. Jedes date1 und date2 natürlich in separaten DB Spalten (Datentyp -> Date). Dazu können die mehrmaligen Events öfters in der Woche laufen. z.B. jeden Mo und Di oder nur jeden Do oder oder ... dazu sind 7 weitere Felder in der DB angelegt worden. (von mo - so) Welche beim stattfinden mit einer 1 andernfalls mit einer 0 versehen sind. Die einmaligen werden mit einer 1 oder 0 in einem anderen Feld markiert. Bisher logisch.

Nun ist es aber so, der User gibt date1 und date2 ein (über ein Formular) um alle Events innerhalb dieser Zeitspanne angezeigt zu bekommen. Das funktioniert auch.

Geht der vom User gewählte Zeitraum >= 7 Tage sind alle Wochentage enthalten und es können getrost alle Events angezeigt werden. Ist der Zeitraum aber kleiner und beinhaltet nur z.B. den Montag und Dienstag, werden ja auch alle mehrmaligen Events angezeigt welche auch in diesem Zeitraum liegen aber z.B. nur am Do stattfinden. Und das soll verhindert werden.

Deswegen hab ich mir gedacht, nach dem der User date1 und date2 eingegeben hat, wird errechnet ob es mehr als 7 Wochentage sind, dann geht es gleich zur mysql_query andernfalls werden die Wochentage "ausgegeben" um die mehrmaligen Events anzuzeigen welche eine 1 bei den "ausgegebenen" Wochentagen in der Spalte der DB haben. Und dabei bin ich jetzt....

Ich hoffe du konntest folgen... ist nicht gerade die Logik der Logik aber wüsste es nicht anders zu realisieren. Das ist mein erstes Projekt mit php und mysql....
 
Alt 30.10.2005, 01:14  
Gast
 
Beiträge: n/a
Standard

Na mal sehen, ob ich es halbwegs verstanden habe
PHP-Code:
<?php
$dStart 
'2005-10-27';
$days 4;

// ab hier nur wenn $days < 7

// Namen der Bit-Felder in der Datenbank
$fieldnames = array(0=>'So''Mo''Di''Mi''Do''Fr''Sa');

// ersten Wochentag ermitteln
$dStart explode('-'$dStart);
$dayOfWeek = (int)date('w'mktime(1,0,0$dStart[1], $dStart[2], $dStart[0]));

$where = array();
for(
$i=0$i<$days%7$i++) {
    
/* Debug */echo '

Debug: i:'
$i' -> index:', ($dayOfWeek+$i) % 7' -> Feld:'$fieldnames[($dayOfWeek+$i) % 7], "</p>\n";
    
$where[] = $fieldnames[($dayOfWeek+$i) % 7] . '=1';
}

/* Debug */echo '

Debug: '
print_r($wheretrue), "</p>\n";

$where join(' OR '$where);
echo 
$where;
?>
 
Alt 30.10.2005, 11:44  
Gast
 
Beiträge: n/a
Standard

Nur mal so ein Vorschlag:
Code:
"
SELECT * FROM tabelle
WHERE ( ('$SucheVonDatum' <= date2) AND ('$SucheBisDatum' >= date1) )
ORDER BY WEEKDAY(date1) < WEEKDAY(CURDATE()), WEEKDAY(date1)
";
...
wobei dann $SucheVonDatum und $SucheBisDatum im "MYSQL_date_Format" vorliegen müssen!
(wenn ich dich richtig verstanden habe...)
~dilemma~
 
Alt 30.10.2005, 16:48  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von smartdragon
@Script von Zergling und Fips
Samstag
Sonntag
Sonntag
Montag
Das halte ich für einen Fehler in deinem Array, der die Wochentage enthält. Den Timestamp bei jedem Schleifendurchlauf um einen Tag (24*60*60 Sekunden) zu erhöhen produziert garantiert nicht 2x den Sonntag.
Zergling-new ist offline  
Alt 30.10.2005, 18:41  
Gast
 
Beiträge: n/a
Standard

Japs bei mir kommt sowas heraus dabei

...
Freitag
Samstag
Sonntag
Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Samstag
Sonntag
Montag
...

Wenn es aus einer DB ausgelesen wird , dann hat ja ein Event mehere verschiedene Termine.Also würde ich einfach beim einspeichern die Daten eintragen direkt und bei der Ausgabe werden dann x Felder als Link makiert wobei halt mehere den selben Inhalt haben.Also den selben Event.

Hier rennt noch ein Thread rum wo einer ein Tut für ein Kalender sucht , da habe ich ein Link zu einer KalenderKlasse gepostet , wo ich mir das mal eingebunden habe das mehere Tage farbig makiert werden.
Das Problem was ich da sehe das 1. nur 1 Kalender ausgegeben werden kann und 2. nur innerhalb des Monats die Tage farbig makiert werden.

Wäre zum Beispiel 1 Event vom 2.10 - 15.10 und der zweite Event vom 21.10 - 29.10 müsste man 2 Kalender einbauen Was nun nicht sonderlich effizient ist.
Also noch eine weitere Ausbau Möglichkeit das man mehere Tage einzeichnen kann pro Monat. Aber da heute Sonntag ist bin ich nun zu faul dafür
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
verschachtelte Rubriken ausgeben / alle anzeigen prinzli PHP Tipps 2008 3 25.02.2008 22:37
Es werden zuviel Daten ausgeben Kein Genie PHP Tipps 2006 5 12.11.2006 12:37
Problem und Frage zu Listenfeldauswertung .... bp158 PHP Tipps 2006 2 10.07.2006 22:37
[Erledigt] Datensätze blockweise nacheinander ausgeben?? Datenbanken 6 13.03.2006 14:22
Höchste IP ausgeben krummzahn PHP Tipps 2005-2 9 17.10.2005 00:16
zahl ausgeben wenn gerade Tschuu PHP Tipps 2005-2 6 07.07.2005 19:20
Mehrere Zeilen aus MySQl ausgeben... King2k PHP Tipps 2005 4 31.05.2005 20:05
ausgeben nach datum möchtegernchegga PHP Tipps 2005 8 04.05.2005 17:22
Daten aus DB gruppiert ausgeben?! medico PHP Tipps 2005 9 07.01.2005 09:38
[Erledigt] Array ausgeben PHP Tipps 2004-2 4 05.12.2004 00:53
Bestimmte Datenbank Felder nur einmal ausgeben Paulo PHP Tipps 2004-2 3 26.11.2004 16:39
[Erledigt] Ganze Tabelle ausgeben PHP Tipps 2004-2 1 21.11.2004 16:48
In GIF-Datei Datum und Uhrzeit ausgeben? PHP Tipps 2004-2 6 20.11.2004 18:03
Liste ausgeben PHP Tipps 2004 3 25.10.2004 10:31
spalte auswählen und alle einträge ausgeben Datenbanken 6 02.08.2004 13:38

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php wochentag ausgeben, wochentag ausgeben php, php wochentage ausgeben, http://www.php.de/php-tipps-2005-2/33072-wochentage-ausgeben.html, php timestamp wochentag, mysql wochentag, 11.11.2005 wochentag, wochentag php ausgeben, wochentage in php ausgeben, 12.11.2006 wochentag, mysql wochentag ermitteln, php alle wochentage ausgeben, wochentage php ausgeben, php wochentag auslesen, wochentag 12.11.2006, wochentag mit php ausgeben, wochentag in php ausgeben, wochentage mit php ausgeben, wochentag zu datum ausgeben php, html wochentag ausgeben

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.