How to get the day of the week in DateTime?
You can use format() function
$today->format('l') //Sunday through Saturday
$today->format('w') //0 (for Sunday) through 6 (for Saturday)
PHP Find the first day-of-week in a given time period
Just a little math with the date('N')
(day of the week) value:
$timestamp = strtotime('2011-11-08');
$weekday = date('N', $timestamp);
if ($weekday > 1) {
$timestamp = strtotime('+' . abs(8 - $weekday) . ' days', $timestamp);
}
echo date('D Y-m-d', $timestamp);
Get current date, given a timezone in PHP?
The other answers set the timezone for all dates in your system. This doesn't always work well if you want to support multiple timezones for your users.
Here's the short version:
<?php
$date = new DateTime("now", new DateTimeZone('America/New_York') );
echo $date->format('Y-m-d H:i:s');
Works in PHP >= 5.2.0
List of supported timezones: php.net/manual/en/timezones.php
Here's a version with an existing time and setting timezone by a user setting
<?php
$usersTimezone = 'America/New_York';
$date = new DateTime( 'Thu, 31 Mar 2011 02:05:59 GMT', new DateTimeZone($usersTimezone) );
echo $date->format('Y-m-d H:i:s');
Here is a more verbose version to show the process a little more clearly
<?php
// Date for a specific date/time:
$date = new DateTime('Thu, 31 Mar 2011 02:05:59 GMT');
// Output date (as-is)
echo $date->format('l, F j Y g:i:s A');
// Output line break (for testing)
echo "\n<br />\n";
// Example user timezone (to show it can be used dynamically)
$usersTimezone = 'America/New_York';
// Convert timezone
$tz = new DateTimeZone($usersTimezone);
$date->setTimeZone($tz);
// Output date after
echo $date->format('l, F j Y g:i:s A');
Libraries
- Carbon — A very popular date library.
- Chronos — A drop-in replacement for Carbon focused on immutability. See below on why that's important.
- jenssegers/date — An extension of Carbon that adds multi-language support.
I'm sure there are a number of other libraries available, but these are a few I'm familiar with.
Bonus Lesson: Immutable Date Objects
While you're here, let me save you some future headache. Let's say you want to calculate 1 week from today and 2 weeks from today. You might write some code like:
<?php
// Create a datetime (now, in this case 2017-Feb-11)
$today = new DateTime();
echo $today->format('Y-m-d') . "\n<br>";
echo "---\n<br>";
$oneWeekFromToday = $today->add(DateInterval::createFromDateString('7 days'));
$twoWeeksFromToday = $today->add(DateInterval::createFromDateString('14 days'));
echo $today->format('Y-m-d') . "\n<br>";
echo $oneWeekFromToday->format('Y-m-d') . "\n<br>";
echo $twoWeeksFromToday->format('Y-m-d') . "\n<br>";
echo "\n<br>";
The output:
2017-02-11
---
2017-03-04
2017-03-04
2017-03-04
Hmmmm... That's not quite what we wanted. Modifying a traditional DateTime
object in PHP not only returns the updated date but modifies the original object as well.
This is where DateTimeImmutable
comes in.
$today = new DateTimeImmutable();
echo $today->format('Y-m-d') . "\n<br>";
echo "---\n<br>";
$oneWeekFromToday = $today->add(DateInterval::createFromDateString('7 days'));
$twoWeeksFromToday = $today->add(DateInterval::createFromDateString('14 days'));
echo $today->format('Y-m-d') . "\n<br>";
echo $oneWeekFromToday->format('Y-m-d') . "\n<br>";
echo $twoWeeksFromToday->format('Y-m-d') . "\n<br>";
The output:
2017-02-11
---
2017-02-11
2017-02-18
2017-02-25
In this second example, we get the dates we expected back. By using DateTimeImmutable
instead of DateTime
, we prevent accidental state mutations and prevent potential bugs.
Related Topics
Mongodb Duplicate Documents Even After Adding Unique Key
Warning: Domdocument::Loadhtml(): Htmlparseentityref: Expecting ';' in Entity,
PHPmailer - Ssl3_Get_Server_Certificate:Certificate Verify Failed
Safely Catch a 'Allowed Memory Size Exhausted' Error in PHP
Find Total Number of Results in MySQL Query With Offset+Limit
"Slash Before Every Quote" Problem
Explode String by One or More Spaces or Tabs
How to Check If a File Is Mp3 or Image File
Redirecting to Previous Page After Login - PHP
Can't Access Global Variable Inside Function
How to Make This Preg_Match Case Insensitive
Get Absolute Path of Initially Run Script
Calculate Age Based on Date of Birth