php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.08.2007, 22:45  
Benutzer
 
Registriert seit: 14.02.2006
Beiträge: 49
webazubi
Standard

Zitat:
Zitat von nikosch77
Zumindest das solltest Du Dir durch Blick in ein PHP Basic Tutorial selbst beantworten können.
Das hatte ich ja mit dem Nachtrag noch aufgeklärt.
Dennoch klappt die Funktion nicht bei dem Beispiel 1. Dienstag im August. Werde da wohl noch ein paar Kontrollen einbauen.
webazubi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.08.2007, 23:01  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von webazubi
Zitat:
Zitat von nikosch77
Zumindest das solltest Du Dir durch Blick in ein PHP Basic Tutorial selbst beantworten können.
Das hatte ich ja mit dem Nachtrag noch aufgeklärt.
Dennoch klappt die Funktion nicht bei dem Beispiel 1. Dienstag im August. Werde da wohl noch ein paar Kontrollen einbauen.
Versuch doch lieber zu debuggen und die Ursache zu finden, ..
Habe gerade keine Zeit dafür.
Zergling-new ist offline  
Alt 02.08.2007, 23:16  
Benutzer
 
Registriert seit: 14.02.2006
Beiträge: 49
webazubi
Standard

Ich glaube in der Funktion muss es statt 0 als Tagesangabe eher 1 heißen:
Code:
$firstWeekday = date('j', strtotime("next $weekday", mktime(0, 0, 0, $month, 1, $year)));
Ich teste noch einige Termine durch, aber erste Tests sehen gut aus
webazubi ist offline  
Alt 02.08.2007, 23:21  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Möglich. Das macht für das Bsp. aber keinen Unterschied, oder? Jedenfalls ist die Reihenfolge einfach falsch. Richtig:
PHP-Code:
<?
return date('Y-m-d'mktime(000$month$requestedDay$year));
Zitat:
int mktime ( [int Stunde [, int Minute [, int Sekunde [, int Monat [, int Tag [, int Jahr [, int is_dst]]]]]]] )
nikosch ist offline  
Alt 02.08.2007, 23:27  
Benutzer
 
Registriert seit: 14.02.2006
Beiträge: 49
webazubi
Standard

Zitat:
Zitat von nikosch77
Reihenfolge einfach falsch
Das war ja schon geklärt
Zitat:
Okay, das Jahr nach hinten und die Tage davor,
Die Funktion bei mir sieht so aus
Code:
function getDateByWeekdayx($year, $month, $weekday, $count)
{
$firstWeekday = date('j', strtotime("next $weekday", mktime(0, 0, 0, $month, 1, $year)));
$requestedDay   = $firstWeekday + ($count - 1) * 7;
    return date('Y-m-d', mktime(0, 0, 0, $month, $requestedDay, $year));
}
Alle Tests bislang bestanden.
webazubi ist offline  
Alt 06.08.2007, 04:52  
Benutzer
 
Registriert seit: 14.02.2006
Beiträge: 49
webazubi
Standard

Hallo. Habe doch noch ein Problem. Auf meinem lokalen Server (XAMPP) ergibt die Funktion das richtige Ergebnis: Der erste Samstag im September ist der 01-09-2007. Lasse ich aber gleichen Code im Internet laufen wird eine Woche später ausgegeben: 08-09-2007.
Wie kommt das bzw. woran kann das liegen? Irgendwelche globalen Einstellungen? Auch bei der 2. oder 3. Woche werden je 7 Tage zuviel angezeigt - zumindest online. Ist das bei Euch auch so?

NACHTRAG - Muss wohl am Hoster liegen. Habe gleiches Skript bei 2 "großen" Anbietern getestet und da kommt das richtige Ergebnis raus. Mal sehen was der kleinere Hoster dazu sagt.


Code:
$test1 = "2007";
$test2 = "9";
$test3 = "Saturday";
$test4 = "1";
echo getDateByWeekday($test1, $test2, $test3, $test4);		//08-09-2007 im www
webazubi ist offline  
Alt 06.08.2007, 10:57  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von webazubi
Ich glaube in der Funktion muss es statt 0 als Tagesangabe eher 1 heißen:
Code:
$firstWeekday = date('j', strtotime("next $weekday", mktime(0, 0, 0, $month, 1, $year)));
Nein das war absichtlich 0.

Egal was du für Daten berechnen möchtest, mit strtotime() und mktime() solltest du dich auskennen oder zumindest wissen, dass die Funktionen Potenzial haben, das man kennen sollte.
Vor allem die User-Notes zu strtotime() sind sehr interessant.
Zergling-new ist offline  
Alt 12.08.2007, 21:31  
Benutzer
 
Registriert seit: 14.02.2006
Beiträge: 49
webazubi
Standard

Zitat:
Zitat von Zergling
Zitat:
Zitat von webazubi
Ich glaube in der Funktion muss es statt 0 als Tagesangabe eher 1 heißen:
Code:
$firstWeekday = date('j', strtotime("next $weekday", mktime(0, 0, 0, $month, 1, $year)));
Nein das war absichtlich 0.
Hier noch ein Ergebnis, das mit der 0anstelle einer 1 ein falsches Ergebnis liefert: Gebe mir den 1. Montag im Mai.
(Falsches) Ergebnis bei 0: 30.5.2007.
Richtiges Ergebnis bei 1: 07.05.2007.

Code:
$jahr = "2007";
$monat = "5";
$tag = "Monday";
$folge = "1";
echo getDateByWeekday($jahr, $monat, $tag, $folge);

function getDateByWeekday($year, $month, $weekday, $count)
{
$firstWeekday = date('j', strtotime("next $weekday", mktime(0, 0, 0,$month, 0, $year)));
$requestedDay   = $firstWeekday + ($count - 1) * 7;
return date('Y-m-d', mktime(0, 0, 0, $month, $requestedDay, $year));
}
Beziehungsweise das richtige Ergebnis mit der 1 statt 0:
Code:
function getDateByWeekday($year, $month, $weekday, $count)
{
$firstWeekday = date('j', strtotime("next $weekday", mktime(0, 0, 0,$month, 1, $year)));
$requestedDay   = $firstWeekday + ($count - 1) * 7;
return date('Y-m-d', mktime(0, 0, 0, $month, $requestedDay, $year));
}
Gibt es dafür vielleicht eine mathematische Regelmäßigkeit, dass bei bestimmten Tagen (
- gerade/ungerade?,
- einstellig/zweistellig?
- Monatswechsel am Wochenende?)
die eine oder andere Funktion genommen werden muss?
webazubi ist offline  
Alt 12.08.2007, 22:31  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Scheint versionsabhängig zu sein, PHP 5.2.3 liefert bei 0 das korrekte Ergebnis 2007-05-07, PHP 4.4.7 liefert fälschlicherweise 2007-04-30. Gegebenenfalls musst du die Parameter von mktime() eben versionsabhängig setzen oder das Endergebnis um eine Woche verlängern.
Oder du machst das ganze nicht mit "next $weekday".
Zergling-new ist offline  
Alt 05.09.2007, 03:35  
Benutzer
 
Registriert seit: 14.02.2006
Beiträge: 49
webazubi
Standard

Habe es jetzt so gelöst, sicherlich etwas kompliziert, aber dafür bislang verlässlich:
Ausgangslage ist ein Startdatum, aus dem ich ermittel, welcher Wochentag und der wievielte Wochentag das in dem Start-Monat ist.
Über eine while-Schleife zähle ich ab diesem Tag immer 7 Tage dazu, bis ich auf das heutige Datum (+1 Monat drauf) komme.
Zu jedem dieser 7-Tage berechne ich mit folgender Formel, um den wievielten Wochentag es sich dabei im Monat handelt.
a) Ermittel den letzten des Vormonats:
b) Subtrahiere das (7-Tage-)Datum der Schleife vom Vormonatsletzen (in Tagen) = $difftage
c)
Code:
floor(($difftage+6)/7)
Heraus kommt beispielsweise für das Suchdatum "7-5-2007" eine "1" für den ersten Montag im Mai.
Da ich mein Array gleich für die nächsten Wochen ab heute gefüllt habe, kann ich nun sagen: Gib mir im Monat "09" das Datum wo die Wochentagsnummer stimmt und wenn dieses Datum bereits vorbei ist, nimm das im nächsten Monat.
webazubi ist offline  
 


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
Wochentag für beliebiges Datum auslesen? PHP Tipps 2004 3 05.08.2004 23:14

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
formel strtotime, excel wievielter tag gleich wochentag, excel der wievielte tag der woche, wievielte woche im monat? excel, excel formel der wievielte wochentag, welcher tag war der 12.08.2007, excel weekday formel, welcher tag war das 12.8.2007, excel der wievielte tag ist heute?, wievielter montag im monat excel, weekday formel, welcher tag war 12.08.2007, excel wievielte wochentag monat, excel datum in php, excel der wievielte wochentag im monat, welcher wochentag war an diesem datum excel 2007, excel wochentag wievielter, wievielte wochentag excel, excel der wievielte wochentag, excel einstellige tage in zweistellige tage

Alle Zeitangaben in WEZ +1. Es ist jetzt 21:49 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.