-1

I'm having trouble getting "weeks" in DateTime::diff function

Here's my code:

$date1 = new DateTime("2017-05-14");
$date2 = new DateTime("2017-06-14");
$interval = $date1->diff($date2);
echo $interval->m.' '.($interval->m > 1 ? 'months' : 'month');

It worked if I'm going to get the "month" count, but I want to get the weeks before turning it into a month:

We have 4 weeks in a month (4.34524 to be exact from Google Unit Converter), if the difference between start date and the date today exceeds 4 weeks, it should output "1 month" and so on..

mickmackusa
  • 43,625
  • 12
  • 83
  • 136
Kaitenz
  • 49
  • 13
  • You can get days (`d`) from the DateInterval that `diff()` returns, maybe just multiply by seven to get weeks? – scrowler Jun 14 '17 at 05:33

3 Answers3

1

Calculate days and then divide by 7 for week. Try this code :

$date1 = new DateTime("2017-05-14");
$date2 = new DateTime("2017-06-14");
$interval = $date1->diff($date2);


  $week = floor($date1->diff($date2)->days/7);
  echo $week;
  if($week > 4)
  {
      echo $interval->m.' '.($interval->m > 1 ? 'months' : 'month');
  }
Rahul
  • 2,374
  • 2
  • 9
  • 17
1

Code (Demo):

$date1 = new DateTime("2017-06-1");
$date2 = new DateTime("2017-06-15");
$interval = $date1->diff($date2);
//var_export($interval);
if($interval->m>0){  // check if >= 1 month
    echo "{$interval->m} month",($interval->m>1?'s':'');
}else{
    $weeks=floor($interval->days/7);  // if not yet 1 month, calc weeks
    echo "$weeks week",$weeks!=1?'s':'';
}
// output: 2 weeks
mickmackusa
  • 43,625
  • 12
  • 83
  • 136
-1

you could do this to get weeks and then make the condition:

$daysInAweek = 7;
$weeks = ($interval->days)/$daysInAweek;
if($weeks >= 4) {
  echo 'is a month';
}

because a week have 7 days.

godie
  • 129
  • 8