it-swarm.com.de

PHP Anzahl der Woche für Monat erhalten

Ich habe also ein Skript, das die Anzahl der Wochen in einem bestimmten Monat und Jahr angibt. Wie kann ich einen bestimmten Tag aus diesem Monat nehmen und feststellen, ob er Teil der Woche 1,2,3,4 oder 5 dieses Monats ist?

31
brenjt

Das Frustrierendste, was ich je versucht habe, um zu arbeiten - aber hier ist es!

<?php

    /**
     * Returns the amount of weeks into the month a date is
     * @param $date a YYYY-MM-DD formatted date
     * @param $rollover The day on which the week rolls over
     */
    function getWeeks($date, $rollover)
    {
        $cut = substr($date, 0, 8);
        $daylen = 86400;

        $timestamp = strtotime($date);
        $first = strtotime($cut . "00");
        $elapsed = ($timestamp - $first) / $daylen;

        $weeks = 1;

        for ($i = 1; $i <= $elapsed; $i++)
        {
            $dayfind = $cut . (strlen($i) < 2 ? '0' . $i : $i);
            $daytimestamp = strtotime($dayfind);

            $day = strtolower(date("l", $daytimestamp));

            if($day == strtolower($rollover))  $weeks ++;
        }

        return $weeks;
    }


    //
    echo getWeeks("2011-06-11", "sunday"); //outputs 2, for the second week of the month
?>
45
Marty

Edit: soviel für "single line" - benötigte Variablen, um eine Neuberechnung mit der Bedingung zu vermeiden. Ich warf ein Standardargument ein, während ich dabei war.

function weekOfMonth($when = null) {
    if ($when === null) $when = time();
    $week = date('W', $when); // note that ISO weeks start on Monday
    $firstWeekOfMonth = date('W', strtotime(date('Y-m-01', $when)));
    return 1 + ($week < $firstWeekOfMonth ? $week : $week - $firstWeekOfMonth);
}

Bitte beachten Sie, dass weekOfMonth(strtotime('Oct 31, 2011'));6 zurückgibt. Einige seltene Monate haben 6 Wochen, entgegen den Erwartungen von OP. Januar 2017 ist ein weiterer Monat mit 6 ISO-Wochen - Sonntag der 1. fällt in die Woche des letzten Jahres, da die ISO-Wochen am Montag beginnen.

Ändern Sie für starshine531 den 0 in return 1 + oder return (int), um eine return 0 +-indexierte Woche des Monats zurückzugeben.

Für Justin Stayton würde ich wochenlang am Sonntag statt am Montag strftime('%U' anstelle von date('W' verwenden, wie folgt:

function weekOfMonth($when = null) {
    if ($when === null) $when = time();
    $week = strftime('%U', $when); // weeks start on Sunday
    $firstWeekOfMonth = strftime('%U', strtotime(date('Y-m-01', $when)));
    return 1 + ($week < $firstWeekOfMonth ? $week : $week - $firstWeekOfMonth);
}

Für diese Version ist 2017-04-30 jetzt in der 6. Aprilwoche und 2017-01-31 in der 5. Woche.

24
Iiridayn
public function getWeeks($timestamp)
{
    $maxday    = date("t",$timestamp);
    $thismonth = getdate($timestamp);
    $timeStamp = mktime(0,0,0,$thismonth['mon'],1,$thismonth['year']);    //Create time stamp of the first day from the give date.
    $startday  = date('w',$timeStamp);    //get first day of the given month
    $day = $thismonth['mday'];
    $weeks = 0;
    $week_num = 0;

    for ($i=0; $i<($maxday+$startday); $i++) {
        if(($i % 7) == 0){
            $weeks++;
        }
        if($day == ($i - $startday + 1)){
            $week_num = $weeks;
        }
      }     
    return $week_num;
}

Hallo, alles, was ich den ganzen Tag versucht habe, diesen Code herauszufinden, habe ich endlich herausgefunden, also dachte ich, ich würde es mit Ihnen allen teilen.

sie müssen lediglich einen Zeitstempel in die Funktion einfügen und die Wochennummer wird an Sie zurückgegeben.

vielen Dank

13
Philip csaplar

es gibt ein Problem mit dieser Methode. Wenn das Datum der Übergabe (sagen wir, 2012/01/01 ist ein Sonntag) und "$ rollover" Tag "Sonntag" ist, dann wird diese Funktion zurückgegeben. Ich denke, ich habe es in der folgenden Funktion behoben. Bitte füge Kommentare hinzu, um es besser zu machen.

function getWeeks($date, $rollover)
{
    $cut        = substr($date, 0, 8);
    $daylen     = 86400;
    $timestamp  = strtotime($date);
    $first      = strtotime($cut . "01");   
    $elapsed    = (($timestamp - $first) / $daylen)+1;
    $i          = 1;
    $weeks      = 0;
    for($i==1; $i<=$elapsed; $i++)
    {
        $dayfind        = $cut . (strlen($i) < 2 ? '0' . $i : $i);
        $daytimestamp   = strtotime($dayfind);
        $day            = strtolower(date("l", $daytimestamp));
        if($day == strtolower($rollover))
        {
            $weeks++;  
        }
    } 
    if($weeks==0)
    {
        $weeks++; 
    }
    return $weeks;  
}
6
Abhilash

Dies ist eine Lösung, die auf der mathematischen Lösung von sberry basiert, jedoch stattdessen die Klasse PHP DateTime verwendet.

function week_of_month($date) {
    $first_of_month = new DateObject($date->format('Y/m/1'));
    $day_of_first = $first_of_month->format('N');
    $day_of_month = $date->format('j');
    return floor(($day_of_first + $day_of_month - 1) / 7) + 1;
}
5
Wtower

Einfach den Code kopieren und hinterher laufen und Monat und Jahr passieren.

z. B. Monat = 04 Jahr = 2013.

Genau das brauchen Sie.

$mm= $_REQUEST['month'];
$yy= $_REQUEST['year'];
$startdate=date($yy."-".$mm."-01") ;
$current_date=date('Y-m-t');
$ld= cal_days_in_month(CAL_GREGORIAN, $mm, $yy);
$lastday=$yy.'-'.$mm.'-'.$ld;
$start_date = date('Y-m-d', strtotime($startdate));
$end_date = date('Y-m-d', strtotime($lastday));
$end_date1 = date('Y-m-d', strtotime($lastday." + 6 days"));
$count_week=0;
$week_array = array();

for($date = $start_date; $date <= $end_date1; $date = date('Y-m-d', strtotime($date. ' + 7 days')))
{
    $getarray=getWeekDates($date, $start_date, $end_date);
echo "<br>";
$week_array[]=$getarray;
    echo "\n";
$count_week++;

}

// its give the number of week for the given month and year
echo $count_week;
//print_r($week_array);

function getWeekDates($date, $start_date, $end_date)
{
    $week =  date('W', strtotime($date));
    $year =  date('Y', strtotime($date));
    $from = date("Y-m-d", strtotime("{$year}-W{$week}+1"));
    if($from < $start_date) $from = $start_date;

    $to = date("Y-m-d", strtotime("{$year}-W{$week}-6")); 
    if($to > $end_date) $to = $end_date;

$array1 = array(
        "ssdate" => $from,
        "eedate" => $to,
);

return $array1;

   // echo "Start Date-->".$from."End Date -->".$to;
}

for($i=0;$i<$count_week;$i++)
{   
$start= $week_array[$i]['ssdate'];
echo "--";

$week_array[$i]['eedate'];
echo "<br>";
}

AUSGABE:

week( 0 )=>2013-03-01---2013-03-02

week( 1 )=>2013-03-03---2013-03-09

week( 2 )=>2013-03-10---2013-03-16

week( 3 )=>2013-03-17---2013-03-23

week( 4 )=>2013-03-24---2013-03-30

week( 5 )=>2013-03-31---2013-03-31
4
pratik

Dies ist der Ausschnitt, den ich gemacht habe, um meine Anforderungen an dasselbe zu erfüllen. Hoffe, das wird dir helfen.

function getWeek($timestamp) {
 $week_year = date('W',$timestamp);
 $week = 0;//date('d',$timestamp)/7;
 $year = date('Y',$timestamp);
 $month = date('m',$timestamp);
 $day = date('d',$timestamp);
 $prev_month = date('m',$timestamp) -1;
if($month != 1 ){
    $last_day_prev = $year."-".$prev_month."-1";
    $last_day_prev = date('t',strtotime($last_day_prev));
    $week_year_last_mon = date('W',strtotime($year."-".$prev_month."-".$last_day_prev));
    $week_year_first_this = date('W',strtotime($year."-".$month."-1"));
    if($week_year_first_this == $week_year_last_mon){
        $week_diff = 0;
    }
    else{
        $week_diff = 1;
    }
    if($week_year ==1 && $month == 12 ){
    // to handle December's last two days coming in first week of January
        $week_year = 53;
    }
    $week = $week_year-$week_year_last_mon + 1 +$week_diff;
}
else{
 // to handle first three days January coming in last week of December.
    $week_year_first_this = date('W',strtotime($year."-01-1"));
    if($week_year_first_this ==52 || $week_year_first_this ==53){
        if($week_year == 52 || $week_year == 53){
            $week =1;
        }
        else{
            $week = $week_year + 1;
        }
    }
    else{
        $week = $week_year;
    }
}
return $week;

}

3
srahul07

Für eine Woche von Montag bis Sonntag (ISO 8601) (oder, wenn es Ihnen einfach egal ist), können Sie dies in einer Zeile tun:

function get_week_of_month($date) {
 return date('W', $date) - date('W', strtotime(date("Y-m-01", $date))) + 1;
}

( Quelle )

Für alles andere (z. B. eine Sonntag-Samstag-Woche) müssen Sie lediglich $ date innerhalb der Funktion anpassen:

function get_week_of_month($date) {
 $date += 86400; //For weeks starting on Sunday
 return date('W', $date) - date('W', strtotime(date("Y-m-01", $date))) + 1;
}

( Danke an diese Jungs/Mädels )

HINWEIS: Am Ende des Jahres können Probleme auftreten (z. B. um 31.12., 1/1 usw.). Lesen Sie hier mehr.

2
rinogo

Dies ist wahrscheinlich kein guter Weg, aber das ist mein erster Gedanke und ich bin wirklich müde.

Tragen Sie alle Ihre Daten in ein Array ein. Das Datumsobjekt muss einen Tagesnamen haben (Montag). Erstellen Sie eine Methode, die das Array durchsucht. Wenn Sie einen Sonntag treffen, fügen Sie einem Wochenzähler 1 hinzu. Sobald Sie das gewünschte Datum gefunden haben, geben Sie den Wochenzähler zurück. In dieser Woche fällt der Tag des Jahres. Für die Woche im Monat müssen Sie den Wochenzähler jedes Mal neu einstellen, wenn Sie an den letzten Tag des Monats gelangen.

2
Trevor Arjeski

Ich glaube, ich habe eine elegante Lösung gefunden

$time = time(); // or whenever
$week_of_the_month = ceil(date('d', $time)/7);
2
Mike Wright

Hier kommen zwei Liner:

function getWeekOfMonth(DateTime $date) {
    $firstDayOfMonth = new DateTime($date->format('Y-m-1'));

    return ceil(($firstDayOfMonth->format('N') + $date->format('j') - 1) / 7);
}

Und Wtowers Lösungen funktioniert nicht 100% richtig.

2
j4r3k

Ich erstelle diese Funktion aus Brasilien :) Ich hoffe es ist nützlich

function weekofmonth($time) {

    $firstday       = 1;
    $lastday        = date('j',$time);
    $lastdayweek = 6; //Saturday

    $week = 1;
    for ($day=1;$day<=$lastday;$day++) {
        $timetmp = mktime(0, 0, 0, date('n',$time), $day, date('Y',$time));
        if (date('N',$timetmp) == $lastdayweek) {
            $week++;
        }
    }
    if (date('N',$time)==$lastdayweek) {
        $week--;
    }

    return $week;
}

$time = mktime(0, 0, 0, 9, 30, 2014);
echo weekofmonth($time);
1
user3813750

Meine 5 Cent:

/**
* calculate number of weeks in a particular month
*/
function weeksInMonth($month=null,$year=null){

    if( null==($year) ) {
        $year =  date("Y",time());  
    }

    if(null==($month)) {
        $month = date("m",time());
    }

    // find number of days in this month
    $daysInMonths =  date('t',strtotime($year.'-'.$month.'-01'));

    $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7);

    $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths));

    $monthStartDay = date('N',strtotime($year.'-'.$month.'-01'));

    if($monthEndingDay<$monthStartDay){

        $numOfweeks++;

    }

    return $numOfweeks;
}
1
XuDing

Ich dachte, ich würde auch meine Funktion teilen. Dies gibt eine Reihe von Wochen zurück. Jede Woche ist ein Array mit dem Wochentag (0..6) als Schlüssel und dem Monatstag (1..31) als Wert.

Die Funktion geht davon aus, dass die Woche mit dem Sonntag beginnt.

Genießen!

function get_weeks($year, $month){

    $days_in_month = date("t", mktime(0, 0, 0, $month, 1, $year));
    $weeks_in_month = 1;
    $weeks = array();

    //loop through month
    for ($day=1; $day<=$days_in_month; $day++) {

        $week_day = date("w", mktime(0, 0, 0, $month, $day, $year));//0..6 starting sunday

        $weeks[$weeks_in_month][$week_day] = $day;

        if ($week_day == 6) {
            $weeks_in_month++;
        }

    }

    return $weeks;

}
1
Krabats

Ich habe einen einfachen Weg gefunden, um herauszufinden, in welcher Woche des Monats heute ist, und es wäre eine kleine Änderung, wenn es an jedem anderen Datum funktionieren würde. Ich füge meine zwei Cents hier hinzu, da ich denke, dass mein Weg viel kompakter ist als die aufgeführten Methoden.

$monthstart = date("N",strtotime(date("n/1/Y")));
$date =( date("j")+$monthstart ) /7;
$ddate= floor( $date );
if($ddate != date) {$ddate++;}

und $ ddate enthält die Wochennummer, die Sie so ändern könnten

function findweek($indate)
{
  $monthstart = date("N",strtotime(date("n/1/Y",strtotime($indate))));
  $date =( date("j",strtotime($indate))+$monthstart ) /7;
  $ddate= floor( $date );
  if($ddate != $date) {$ddate++;}
  return $ddate;
}

und es würde zurückgeben, welche Woche des Monats ein Datum ist, an dem Sie es angeben. Was es tut, ist zuerst die Anzahl der Tage vom Beginn der Woche bis zum ersten des Monats zu ermitteln. fügt dann hinzu, dass das aktuelle Datum durch das aktuelle Datum durch 7 geteilt wird. Dadurch wird angegeben, wie viele Wochen seit Beginn des Monats vergangen sind, einschließlich einer Dezimalstelle für den Teil der aktuellen Woche, der vergangen ist. Was ich als nächstes mache, ist diese Zahl abrunden und dann die abgerundete Version mit dem Original vergleichen, wenn die beiden am Ende der Woche mit Ihren übereinstimmen, so dass sie bereits in der Zahl enthalten sind. Wenn dies nicht der Fall ist, addieren Sie einfach die abgerundete Zahl und voila, Sie haben die aktuelle Wochennummer.

1
Kit Ramos

Srahul07s Lösung funktioniert perfekt ... Wenn Sie halten sich an das Montags-Sonntags-Wochensystem! Hier in Murica tendieren Nicht-Business-Leute dazu, von Sonntag bis Samstag eine Woche zu sein, daher ist der 1. Mai 2011 Woche 1 und der Mai 2 2011 noch Woche 1.

Durch Hinzufügen der folgenden Logik am Ende seiner Funktion, unmittelbar bevor $ week zurückgegeben wird, wird dies in ein Sonntag -> Montag-System umgewandelt:

if (!date('w',strtotime("$year-$month-01")) && date('w',$timestamp))
    $week--;
elseif (date('w',strtotime("$year-$month-01")) && !date('w',$timestamp))
    $week++;
1
Eric Lawler
function get_week_of_month( $timestamp )
{
    $week_of_month = 0; 
    $month = date( 'j', $timestamp );
    $test_month = $month;
    while( $test_month == $month )
    {
        $week_of_month++;
        $timestamp = strtotime( '-1 week', $timestamp );
        $test_month = date( 'j', $timestamp );
    }
    return $week_of_month;
}
0
Algis

Die Antwort von @ michaelc hat mir sehr gefallen. Ich blieb jedoch bei einigen Punkten hängen. Es schien, als würde der Sonntag jedes Mal um eins rollen. Ich denke, es hat damit zu tun, an welchem ​​Wochentag der Wochenanfang ist. In jedem Fall ist hier meine leichte Änderung, aus Gründen der Lesbarkeit etwas erweitert:

function wom(\DateTime $date) {
    // The week of the year of the current month
    $cw = date('W', $date->getTimestamp());

    // The week of the year of the first of the given month
    $fw = date('W',strtotime(date('Y-m-01',$date->getTimeStamp())));

    // Offset
    $o = 1;

    // If it is a Saturday, offset by two.
    if( date('N',$date->getTimestamp()) == 7 ) {
        $o = 2;
    }

    return $cw -$fw + $o;
}

Wenn der Termin also der 9. November 2013 ist ...

$cw = 45
$fw = 44

und mit dem Versatz von 1 wird 2 korrekt zurückgegeben.

Wenn das Datum der 10. November 2013 ist, sind $cw und $fw die gleichen wie zuvor, der Versatz ist jedoch 2 und es wird 3 zurückgegeben.

0
Abinadi
/**
         * In case of Week we can get the week of year. So whenever we will get the week of the month then we have to
         * subtract the until last month weeks from it will give us the current month week.
         */
        $dateComponents = getdate();

        if($dateComponents['mon'] == 1)
            $weekOfMonth = date('W', strtotime($dateComponents['year'].'-'.$dateComponents['mon'].'-'.$dateComponents['mday']))-1; // We subtract -1 to map it to the array
        else
            $weekOfMonth = date('W', strtotime($dateComponents['year'].'-'.$dateComponents['mon'].'-'.$dateComponents['mday']))-date('W', strtotime($dateComponents['year'].'-'.$dateComponents['mon'].'-01'));
0
Abbas

Aus Kohlenstoff:

return (int) ceil((new Datetime())->format('d') / 7);

So einfach wie möglich :)

0

Python: Nummer der Woche in einem Monat

Dies ist ein bearbeitetes Beispiel in Python - sollte einfach zu konvertieren sein.

function getWeekOfMonth(\DateTime $date)
{
    $firstWeekdayOfMonth = new DateTime("first weekday 0 {$date->format('M')} {$date->format('Y')}");
    $offset = $firstWeekdayOfMonth->format('N')-1;
    return intval(($date->format('j') + $offset)/7)+1;
}
0
Elier

Ich habe das online gefunden: http://kcwebprogrammers.blogspot.de/2009/03/current-week-in-month-php.html

Er hat eine sehr einfache Lösung, die für mich gut funktioniert.

$currentWeek = ceiling((date("d") - date("w") - 1) / 7) + 1;

Also zum Beispiel:

$now = strtotime("today");
$weekOfMonth = ceil((date("d", $now) - date("w", $now) - 1) / 7) + 1;
0
Alex

Kurz und narrensicher:

// Function accepts $date as a string,
// Returns the week number in which the given date falls.
// Assumed week starts on Sunday.
function wom($date) {
  $date = strtotime($date);
  $weeknoofday = date('w', $date);
  $day = date('j', $date);
  $weekofmonth = ceil(($day + (7-($weeknoofday+1))) / 7);
  return $weekofmonth;
}
// Test
foreach (range(1, 31) as $day) {
    $test_date = "2015-01-" . str_pad($day, 2, '0', STR_PAD_LEFT);
    echo "$test_date - ";
    echo wom($test_date) . "\n";
}
0
Kevin Siji

sie können W in neueren PHP-Versionen verwenden. http://php.net/manual/de/function.date.php

ich habe es so benutzt:

function getWeek($date) { 
$month_start=strtotime("1 ".date('F Y',$date));
$current_date=strtotime(date('j F Y',$date));

$month_week=date("W",$month_start);
$current_week=date("W",$current_date);
return ($current_week-$month_week);

}//0 is the week of the first.
0
Michael Kent

Wenn Sie einen Monat eindeutig in 4 Wochen unterteilen möchten, können Sie diese Funktion verwenden. Dies ist hilfreich, wenn Sie möchten 

  • "der erste montag des monats"
  • "der dritte donnerstag des monats" usw.

Auf geht's

/**
* This Calculates (and returns) the week number within a month, based on date('j') day of month.
* This is useful, if you want to have (for instance) the first Thu in month, regardless of date
* @param $Timestamp
* @return float|int
*/
function getWeekOfMonth($Timestamp)
{
    $DayOfMonth=date('j', $Timestamp); // Day of the month without leading zeros 0-31

    if($DayOfMonth>21) return 4;
    if($DayOfMonth>14) return 3;
    if($DayOfMonth>7) return 2;
    return 1;
}
0
summsel

Nach langer Anstrengung habe ich die Lösung gefunden

<?php

function getWeeks($month,$year)
{
    $month = intval($month);        //force month to single integer if '0x'
    $suff = array('st','nd','rd','th','th','th');       //week suffixes
    $end = date('t',mktime(0,0,0,$month,1,$year));      //last date day of month: 28 - 31
    $start = date('w',mktime(0,0,0,$month,1,$year));    //1st day of month: 0 - 6 (Sun - Sat)
    $last = 7 - $start;                     //get last day date (Sat) of first week
    $noweeks = ceil((($end - ($last + 1))/7) + 1);      //total no. weeks in month
    $output = "";                       //initialize string     
    $monthlabel = str_pad($month, 2, '0', STR_PAD_LEFT);
    for($x=1;$x<$noweeks+1;$x++)
    {   
        if($x == 1)
        {
            $startdate = "$year-$monthlabel-01";
            $day = $last - 6;
        }
        else
        {
            $day = $last + 1 + (($x-2)*7);
            $day = str_pad($day, 2, '0', STR_PAD_LEFT);
            $startdate = "$year-$monthlabel-$day";
        }
        if($x == $noweeks)
        {
            $enddate = "$year-$monthlabel-$end";
        }
        else
        {
            $dayend = $day + 6;
            $dayend = str_pad($dayend, 2, '0', STR_PAD_LEFT);
            $enddate = "$year-$monthlabel-$dayend";
        }
        $j=1;
        if($j--)
        {
            $k=getTotalDate($startdate,$enddate);
            $j=1;
        }

    $output .= "Week ".$xyz." week -> Start date=$startdate End date=$enddate <br />";  
    }
    return $output;
}

if(isset($_POST) && !empty($_POST)){
    $month = $_POST['m'];
    $year = $_POST['y']; 
    echo getWeeks($month,$year);
}
?>

<form method="post">
  M:
  <input name="m" value="" />
  Y:
  <input name="y" value="" />
  <input type="submit" value="go" />
</form>

Ich benutze diese einfache Funktion:

function weekNumberInMonth($timestampDate)
{
    $firstDayOfMonth = strtotime(date('01-M-Y 00:00:00', $timestampDate));
    $firstWeekdayOfMonth = date( 'w', $firstDayOfMonth);
    $dayNumberInMonth = date('d', $timestampDate);
    $weekNumberInMonth = ceil(($dayNumberInMonth + $firstWeekdayOfMonth) / 7);
    return $weekNumberInMonth;
}
0

Mit kohle:

$ date = Carbon :: now (); $ d1 = $ date-> startOfMonth (); $ d2 = $ date-> endOfMonth ();

$ weeks = $ d1-> diffInWeeks ($ d2);

0
carlituxman

wenn ich es richtig verstehe, ist die Frage, wie man die Anzahl der Wochen innerhalb eines Monats eines bestimmten Tages bestimmt ... Ich habe nach einer ähnlichen Lösung gesucht. Ich habe einige Ideen der obigen Antworten verwendet, um meine eigene Lösung zu entwickeln. Hoffe, es kann für jemanden hilfreich sein. Wenn ja, dann UpVote meine Antwort.

function week_number_within_month($datenew){

        $year =  date("Y",strtotime($datenew));  
        $month = date("m",strtotime($datenew));

    // find number of days in this month
    $daysInMonths =  date('t',strtotime($year.'-'.$month.'-01'));
    $numOfweeks = ($daysInMonths%7==0?0:1) + intval($daysInMonths/7);
    $monthEndingDay= date('N',strtotime($year.'-'.$month.'-'.$daysInMonths));
    $monthStartDay = date('N',strtotime($year.'-'.$month.'-01'));
    if($monthEndingDay<$monthStartDay){
        $numOfweeks++;
    }
    $date=date('Y/m/d', strtotime($year.'-'. $month.'-01'));
    $week_array=Array();
    for ($i=1; $i<=$numOfweeks; $i++){   /// create an Array of all days of month separated by weeks as a keys
            $max = 7;
            if ($i ==1){ $max = 8 - $monthStartDay;}
            if ($i == $numOfweeks){ $max = $monthEndingDay;}
            for ($r=1; $r<=$max; $r++){

                    $week_array[$i][]=$date;
                    $date = date('Y/m/d',strtotime($date . "+1 days"));
            }
    }
    $new_datenew = date('Y/m/d', strtotime($datenew));
    $week_result='';
        foreach ($week_array as $key => $val){  /// finding what week number of my date from week_array
            foreach ($val as $kr => $value){
            if ($new_datenew == $value){
                $week_result = $key;
            } 
            }
        }
    return $week_result;
}
print week_number_within_month('2016-09-15');
0
Sergiu Costas