2016-06-17 10 views
1

Ich versuche, Daten von Monday und Sunday von each week für die letzten 4-8 Wochen mit PHP Date function zu generieren.Wie erhalten Sie die Daten der letzten 4 Wochen Montag und Sonntag in PHP?

Ich habe versucht, es so zu bekommen.

<?php 
$dates_array = array(); 

$dates_array['-3 week monday'] = date('Y-m-d',strtotime("Last Monday - 3 week")); 
$dates_array['-3 week sunday'] = date('Y-m-d',strtotime("Last Sunday - 3 week")); 

$dates_array['-2 week monday'] = date('Y-m-d',strtotime("Last Monday - 2 week")); 
$dates_array['-2 week sunday'] = date('Y-m-d',strtotime("Last Sunday - 2 week")); 

$dates_array['last monday'] = date('Y-m-d',strtotime("Last Monday")); 
$dates_array['last sunday'] = date('Y-m-d',strtotime("Last Sunday")); 

$dates_array['this monday'] = date('Y-m-d',strtotime("Monday")); 
$dates_array['this sunday'] = date('Y-m-d',strtotime("Sunday")); 

print_r($dates_array); 

OUTPUT:

Array 
(
    [-3 week monday] => 2016-05-16 
    [-4 week sunday] => 2016-05-15 
    [-2 week monday] => 2016-05-30 
    [-2 week sunday] => 2016-05-29 
    [-1 week monday] => 2016-06-06 
    [-1 week sunday] => 2016-06-05 
    [last monday] => 2016-06-06 
    [last sunday] => 2016-06-12 
    [this monday] => 2016-06-13 
    [this sunday] => 2016-06-19 
) 

und Ausgang i bekommen habe ist, alle richtig für diese Woche und letzte Woche, aber vor der letzten Woche ist alles vermasselt, wird whys das?

Ich habe sogar so versucht.

<?php 
$dates_array = array(); 

$dates_array['-3 week monday'] = date('Y-m-d',strtotime("Monday", strtotime('-3 week'))); 
$dates_array['-3 week sunday'] = date('Y-m-d',strtotime("Sunday", strtotime('-3 week'))); 

$dates_array['-2 week monday'] = date('Y-m-d',strtotime("Monday", strtotime('-2 week'))); 
$dates_array['-2 week sunday'] = date('Y-m-d',strtotime("Sunday", strtotime('-2 week'))); 

$dates_array['last monday'] = date('Y-m-d',strtotime("Monday", strtotime('-1 week'))); 
$dates_array['last sunday'] = date('Y-m-d',strtotime("Sunday", strtotime('-1 week'))); 

$dates_array['this monday'] = date('Y-m-d',strtotime("Monday")); 
$dates_array['this sunday'] = date('Y-m-d',strtotime("Sunday")); 

print_r($dates_array); 

OUTPUT:

Array 
(
    [-3 week monday] => 2016-05-30 
    [-3 week sunday] => 2016-05-29 
    [-2 week monday] => 2016-06-06 
    [-2 week sunday] => 2016-06-05 
    [last monday] => 2016-06-13 
    [last sunday] => 2016-06-12 
    [this monday] => 2016-06-20 
    [this sunday] => 2016-06-19 
) 

Im obigen Beispiel sind auch die Ausgangsdaten seltsam.

also was ist der beste Ansatz zu erhalten Daten von Monday und Sunday von each week für die letzten 4-8 Wochen mit PHP.

mit: PHP Version 5.3.3


UPDATE:

ich habe es geschafft, die richtigen Termine zu erhalten, wie von Jeroen vorgeschlagen, aber gleiche Datum Funktion, wie dieser

<?php 

$dates_array = array(); 

$dates_array['-4 week monday'] = date('Y-m-d',strtotime("Monday", strtotime('this week -4 week'))); 
$dates_array['-4 week sunday'] = date('Y-m-d',strtotime("Sunday", strtotime('this week -4 week'))); 

$dates_array['-3 week monday'] = date('Y-m-d',strtotime("Monday", strtotime('this week -3 week'))); 
$dates_array['-3 week sunday'] = date('Y-m-d',strtotime("Sunday", strtotime('this week -3 week'))); 

$dates_array['-2 week monday'] = date('Y-m-d',strtotime("Monday", strtotime('this week -2 week'))); 
$dates_array['-2 week sunday'] = date('Y-m-d',strtotime("Sunday", strtotime('this week -2 week'))); 

$dates_array['last monday'] = date('Y-m-d',strtotime("Monday", strtotime('last week'))); 
$dates_array['last sunday'] = date('Y-m-d',strtotime("Sunday", strtotime('last week'))); 

$dates_array['this monday'] = date('Y-m-d',strtotime("Monday", strtotime('this week'))); 
$dates_array['this sunday'] = date('Y-m-d',strtotime("Sunday", strtotime('this week'))); 

print_r($dates_array); 

AUSGABE:

Array 
(
    [-4 week monday] => 2016-05-16 
    [-4 week sunday] => 2016-05-22 
    [-3 week monday] => 2016-05-23 
    [-3 week sunday] => 2016-05-29 
    [-2 week monday] => 2016-05-30 
    [-2 week sunday] => 2016-06-05 
    [last monday] => 2016-06-06 
    [last sunday] => 2016-06-12 
    [this monday] => 2016-06-13 
    [this sunday] => 2016-06-19 
) 
+0

Wenn Sie bereits über die Informationen für dieses oder letzte Woche bekommen können, sollten Sie es in einem 'DateTime' Objekt setzen. Dann können Sie Intervalle von 7 Tagen leicht subtrahieren. Das funktioniert ab PHP 5.3 (obwohl Sie vielleicht auf eine neuere - gepflegte - Version aktualisieren möchten ...). – jeroen

+0

danke, ich habe es geschafft, richtige Daten mit dieser Woche zu bekommen, Aktualisierung auf die aktuelle Version ist auch in Todo. aber es wird etwas dauern, um den Code entsprechend zu aktualisieren. – AMB

+0

@AMB: Können Sie diese Frage schließen, indem Sie eine Antwort akzeptieren oder einen Kommentar abgeben? –

Antwort

2

Sie diese Funktion könnte:

function getWeekMonSun($weekOffset) { 
    $dt = new DateTime(); 
    $dt->setIsoDate($dt->format('o'), $dt->format('W') + $weekOffset); 
    return array(
     'Mon' => $dt->format('Y-m-d'), 
     'Sun' => $dt->modify('+6 day')->format('Y-m-d'), 
    ); 
} 

, die zurückkehren wird Montag und Sonntag die Offset-Woche.

demo

+0

danke, das ist beste Lösung, funktioniert wie Charme. Sie sollten auch ein Beispiel in die Antwort einfügen. – AMB

1

Anstatt Tage mit Woche zu subtrahieren, verwenden Sie die Anzahl der Tage mit dem aktuellen Datum, wie unten gezeigt.

<?php 
    date('Y-m-d',strtotime("Monday")); 
    echo date('Y-m-d',strtotime('last monday days')); 
    echo date('Y-m-d',strtotime('last monday -7 days')); 
    echo date('Y-m-d',strtotime('last monday -14 days')); 
    echo date('Y-m-d',strtotime('last monday -21 days')); 
    echo date('Y-m-d',strtotime('last monday -28 days')); 
    ?> 
1

versuchen Sie die folgenden Möglichkeiten, um heute mit Vielfachen von 7

// This Week 
    echo date("d-m-Y", strtotime("this Monday"))."<br>"; 
    echo date("d-m-Y", strtotime("this Sunday"))."<br>"; 

    // Last Week 
    echo date("d-m-Y", strtotime("this Monday -7 day"))."<br>"; 
    echo date("d-m-Y", strtotime("this Sunday -7 day"))."<br>"; 

    // -2 Week 
    echo date("d-m-Y", strtotime("this Monday -14 day"))."<br>"; 
    echo date("d-m-Y", strtotime("this Sunday -14 day"))."<br>"; 

    // -3 Week 
    echo date("d-m-Y", strtotime("this Monday -21 day"))."<br>"; 
    echo date("d-m-Y", strtotime("this Sunday -21 day"))."<br>"; 

    // -4 Week 
    echo date("d-m-Y", strtotime("this Monday -28 day"))."<br>"; 
    echo date("d-m-Y", strtotime("this Sunday -28 day"))."<br>"; 

    // -5 Week 
    echo date("d-m-Y", strtotime("this Monday -35 day"))."<br>"; 
    echo date("d-m-Y", strtotime("this Sunday -35 day"))."<br>"; 

    // -6 Week 
    echo date("d-m-Y", strtotime("this Monday -42 day"))."<br>"; 
    echo date("d-m-Y", strtotime("this Sunday -42 day"))."<br>"; 

    // -7 Week 
    echo date("d-m-Y", strtotime("this Monday -49 day"))."<br>"; 
    echo date("d-m-Y", strtotime("this Sunday -49 day"))."<br>"; 
2

Mit Zeitstempel zu reduzieren und die Datumsfunktion:

<?php 
$timestamp = strtotime('20160604'); 

$day_of_the_week = date('N', $timestamp); // N returns mon-sun as digits 1 - 7. 

$sunday_ts = $timestamp + (7 - $day_of_the_week) * 24 * 60 * 60; 
$monday_ts = $timestamp - ($day_of_the_week - 1) * 24 * 60 * 60; 

$dates = array(); 
for($i = 1; $i < 5; $i++) { 
    $dates_key = '-' . $i . ' Week'; 
    $dates[$dates_key] = array(
     'Monday' => date('Y m d', $monday_ts - $i * 7 * 24 * 60 * 60), 
     'Sunday' => date('Y m d', $sunday_ts - $i * 7 * 24 * 60 * 60) 
     ); 
} 

printf("Given date %s falls on a %s.\n", date('Y m d', $timestamp), date('l', $timestamp)); 
var_export($dates); 

Ausgang:

Given date 2016 06 04 falls on a Saturday. 
array (
    '-1 Week' => 
    array (
    'Monday' => '2016 05 23', 
    'Sunday' => '2016 05 29', 
), 
    '-2 Week' => 
    array (
    'Monday' => '2016 05 16', 
    'Sunday' => '2016 05 22', 
), 
    '-3 Week' => 
    array (
    'Monday' => '2016 05 09', 
    'Sunday' => '2016 05 15', 
), 
    '-4 Week' => 
    array (
    'Monday' => '2016 05 02', 
    'Sunday' => '2016 05 08', 
), 
) 
0

ich gemacht eine Tabelle von Daten mit gebrochenen Daten unten, zB.;

date - '2005-01-01', 
day - 'Saturday', 
day-number - 1, 
month number -1, 
month - 'January', 
year number - 2005, 
dt formated - 20050101 

es vom 1. Januar 2005 bis 2049. so macht es Dinge wie das, was Sie brauchen, super einfach.in diesem Fall würde ich einfach verwenden;

SELECT dt VON 000_00_Calender WHERE dt zwischen CURDATE() - 30 und CURDATE() und dt_day in ('Montag', 'Sonntag')

, wenn Sie möchten, können Sie die Datei erhalten here. es ist ein .sql (1.12mb)

Probe;

INSERT INTO 000_00_Calender (recID, dt, dt_day, day_number, month_number, month_word, dt_year, date_formated, verified) VALUES (1, '2005-01-01', 'am Samstag, 1, 1, "Januar", 2005, 20050101, "-"), (2, "2005-01-02", "Sonntag", 2, 1, "Januar", 2005, 20050102, "-"), (3, "2005-01-03", "Montag", 3, 1, "Januar", 2005, 20050103, "-"), (4, "2005-01-04", "Dienstag", 4, 1, " Januar 2005, 20050104, '-'), (5, '2005-01-05', 'Mittwoch ‘, 5, 1, 'Januar', 2005, 20050105, '-'), .....

Verwandte Themen