Reputation: 8394
If I've got a $date
YYYY-mm-dd
and want to get a specific $day
(specified by 0 (sunday) to 6 (saturday)) of the week that YYYY-mm-dd
is in.
For example, if I got 2012-10-11
as $date
and 5
as $day
, I want to get 2012-10-12
, if I've got 0
as $day
, 2012-10-14
EDIT:
Most of you misunderstood it. I got some date, $date
and want to get a day specified by 0-6 of the same week $date
is in.
So no, I don't want the day of $date
...
Upvotes: 136
Views: 393336
Reputation: 1048
I had to use a similar solution for Portuguese:
<?php
$scheduled_day = '2018-07-28';
$days = ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'];
$day = date('w',strtotime($scheduled_day));
$scheduled_day = date('d-m-Y', strtotime($scheduled_day))." ($days[$day])";
// provides 28-07-2018 (Sáb)
Upvotes: 4
Reputation: 9
<?php echo date("H:i", time()); ?>
<?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>
Simple, this should do the trick
Upvotes: 0
Reputation: 2317
If your date is already a DateTime
or DateTimeImmutable
you can use the format
method.
$day_of_week = intval($date_time->format('w'));
The format string is identical to the one used by the date function.
To answer the intended question:
$date_time->modify($target_day_of_week - $day_of_week . ' days');
Upvotes: 13
Reputation: 2942
Just:
2012-10-11 as $date and 5 as $day
<?php
$day=5;
$w = date("w", strtotime("2011-01-11")) + 1; // you must add 1 to for Sunday
echo $w;
$sunday = date("Y-m-d", strtotime("2011-01-11")-strtotime("+$w day"));
$result = date("Y-m-d", strtotime($sunday)+strtotime("+$day day"));
echo $result;
?>
The $result = '2012-10-12' is what you want.
Upvotes: 5
Reputation: 4942
I think this is what you want.
$dayofweek = date('w', strtotime($date));
$result = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));
Upvotes: 172
Reputation: 27317
I'm afraid you have to do it manually. Get the date's current day of week, calculate the offset and add the offset to the date.
$current = date("w", $date)
$offset = $day - $current
$new_date = new DateTime($date)
->add(
new DateInterval($offset."D")
)->format('Y-m-d')
Upvotes: 1
Reputation: 5683
Try
$date = '2012-10-11';
$day = 1;
$days = array('Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday','Friday', 'Saturday');
echo date('Y-m-d', strtotime($days[$day], strtotime($date)));
Upvotes: 20
Reputation: 56592
PHP Manual said :
w Numeric representation of the day of the week
You can therefore construct a date with mktime, and use in it date("w", $yourTime);
Upvotes: 5
Reputation: 41080
You can use the date() function:
date('w'); // day of week
or
date('l'); // dayname
Example function to get the day nr.:
function getWeekday($date) {
return date('w', strtotime($date));
}
echo getWeekday('2012-10-11'); // returns 4
Upvotes: 146