PHP date Tag prüfen
mixmastertobsi
- php
0 Tabellenkalk0 tk
Hallo,
ich versuche mit PHP zu prüfen, ob wir uns gerade in dem Zeitraum X befinden.
$array["Weekend"]["time"]["1"]["start"] = strtotime('Friday 18:00:00');
$array["Weekend"]["time"]["1"]["end"] = strtotime('Sunday 23:59:59');
Wenn wir nun Freitag 19 Uhr haben, gibt mir das Skript true zurück. Alles gut. Nun haben wir aber Samstag und eigentlich befinden wir uns noch in dem Zeitraum, allerdings gibt mit das Skript false zurück und es liegt wohl daran, dass nun als Datum der nächste Freitag genommen wird, da der Freitag gestern bereits verstrichen ist. Nun habe ich Versucht mit Kalenderwoche dem Skript mitzuteilen, dass er das Datum von dem Freitag in der aktuellen Kalenderwoche nehmen muss, aber leider gelingt mir das nicht...
$array["Weekend"]["time"]["1"]["start"] = strtotime('Friday 2016W13 18:00:00');
$array["Weekend"]["time"]["1"]["end"] = strtotime('Sunday 2016W13 23:59:59');
Hallo,
Nun haben wir aber Samstag und eigentlich befinden wir uns noch in dem Zeitraum, allerdings gibt mit das Skript false zurück und es liegt wohl daran, dass nun als Datum der nächste Freitag genommen wird, da der Freitag gestern bereits verstrichen ist.
reichts vielleicht, zu prüfen, ob Samstag/Sonntag und falls Freitag, ob nach 18 Uhr?
Gruß
Kalk
Hallo,
$array["Weekend"]["time"]["1"]["start"] = strtotime('Friday 2016W13 18:00:00');
Entweder du prüfst (wie von Tabellenkalk geschrieben) auf Sa/So/Fr>18:00 Uhr oder du schreibst hinter Friday statt der Kalenderwoche einfach noch "this week".
Gruß,
Tobias
Hallo und Danke, doch leider geht es nicht
$array["Weekend"]["time"]["1"]["start"] = strtotime('Friday this week 18:00:00');
date("Y-m-d",strtotime('Friday this week 18:00:00'));
# = 2016-04-08
date("Y-m-d",strtotime('Friday 2016W13 18:00:00'));
# = 2016-03-28
Hallo,
date("Y-m-d",strtotime('Friday 2016W13 18:00:00')); = 2016-03-28
wie man im Vergleich mit einem Kalender sieht, ist das kein Freitag, sondern ein Montag.
Probiere mal:
date("Y-m-d",strtotime('2016W13 +4 days 18:00:00'));
Gruß
Kalk
Hallo und Danke, doch leider geht es nicht
Wenn die Dokumentation zu den relativen Datumsformaten nicht verständlich oder ungenügend ist, dann mach es einfach und stupid:
<?php
/* Unit-Test
$LE="<br>\n";
$zeitpunkt[] = date('U');
$zeitpunkt[] = date('U', mktime(16, 30, 0, 1, 7, 2000));
$zeitpunkt[] = date('U', mktime(16, 31, 0, 1, 7, 2000));
$zeitpunkt[] = date('U', mktime(17, 0, 0, 1, 8, 2000));
$zeitpunkt[] = date('U', mktime(17, 0, 0, 1, 9, 2000));
$zeitpunkt[] = date('U', mktime(22, 30, 0, 1, 9, 2000));
$zeitpunkt[] = date('U', mktime(22, 31, 0, 1, 9, 2000));
foreach ($zeitpunkt as $zp) {
if ( ifWeekend($zp) ) {
echo date('Y m d H:i :: N G :: D, H:i', $zp) . " : Positiv$LE";
} else {
echo date('Y m d H:i :: N G :: D, H:i', $zp) . " : Negativ$LE";
}
}
//*/
function ifWeekend
(
$timestamp,
$firstWeekendDay = 5, //Freitag
$firstWeekendHour = 16,
$firstWeekendMinute = 31,
$lastWeekendDay = 7, //Sonntag
$LastWeekendHour = 22,
$LastWeekendMinute = 30
) {
$weekDay = date('N', $timestamp);
$hour = date('G', $timestamp);
$minute = date('i', $timestamp);
if (
(
$weekDay == $firstWeekendDay
and $hour > $firstWeekendHour
)
or (
$weekDay == $firstWeekendDay
and $hour == $firstWeekendHour
and $minute >= $firstWeekendMinute
)
or (
$weekDay > $firstWeekendDay
and $weekDay < $lastWeekendDay
)
or (
$weekDay == $lastWeekendDay
and $hour < $LastWeekendHour
)
or (
$weekDay == $lastWeekendDay
and $hour == $LastWeekendHour
and $minute <= $LastWeekendMinute
)
) {
return true;
} else {
return false;
}
}
Wenn Deine Definition von "Wochenende" aber auch wahlweise den "Montag 6:00" Uhr als Ende vorsehen sollte oder können soll, dann brauchst Du ein wenig wenig mehr if(and or)-then-else.
Hallo Regina Schlauklug,
mach es einfach und stupid:
Ja, das hatte ich im ersten Thread auch schon mal vorgeschlagen.
Bis demnächst
Matthias
Hallo,
Hallo und Danke, doch leider geht es nicht
$array["Weekend"]["time"]["1"]["start"] = strtotime('Friday this week 18:00:00'); date("Y-m-d",strtotime('Friday this week 18:00:00')); # = 2016-04-08
Dann ist das Handbuch zu strtotime() falsch oder ich versteh das Changelog zu Version 5.3 falsch - so wie ich das interpretiere müsste mit "this week" eigentlich die aktuelle Woche von Montag bis Sonntag gemeint sein, tatsächlich ist es aber die Woche von Sonntag bis Samstag. Vielleicht solltest du wirklich die Variante verwenden die Tabellenkalk vorgeschlagen hat und einfach prüfen ob das aktuelle Datum ein Samstag/Sonntag oder ein Freitag nach 18 Uhr ist.
Gruß,
Tobias
Tach,
Dann ist das Handbuch zu strtotime() falsch oder ich versteh das Changelog zu Version 5.3 falsch - so wie ich das interpretiere müsste mit "this week" eigentlich die aktuelle Woche von Montag bis Sonntag gemeint sein, tatsächlich ist es aber die Woche von Sonntag bis Samstag.
der Sonntag als erster Tag der Woche ist in den USA üblich und in date geht die Woche auch von Sonntag 0 bis Samstag 6, wenn man nicht explizit die ISO-Woche verlangt.
mfg
Woodfighter
Hallo woodfighter,
der Sonntag als erster Tag der Woche ist in den USA üblich und in date geht die Woche auch von Sonntag 0 bis Samstag 6, wenn man nicht explizit die ISO-Woche verlangt.
Weiß ich :-) Aber im Handbuch steht halt zu strtotime():
Prior to PHP 5.3.0, relative time formats supplied to the time argument of strtotime() such as this week, previous week, last week, and next week were interpreted to mean a 7 day period relative to the current date/time, rather than a week period of Monday through Sunday.
weswegen bin ich davon ausgegangen dass der Sonntag der letzte Tag der Woche und nicht der erste.
Gruß,
Tobias
Tach,
Weiß ich :-) Aber im Handbuch steht halt zu strtotime():
Prior to PHP 5.3.0, relative time formats supplied to the time argument of strtotime() such as this week, previous week, last week, and next week were interpreted to mean a 7 day period relative to the current date/time, rather than a week period of Monday through Sunday. weswegen bin ich davon ausgegangen dass der Sonntag der letzte Tag der Woche und nicht der erste.
hmm, warum habe ich den Satz nicht gefunden, als ich ihn gestern gesucht habe? Da hätte ich doch eigentlich schon wach sein sollen.
mfg
Woodfighter