3.8.1 Problem
You want to know the day or week of the year, the day of
the week, or the day of the month. For example, you want to print a special
message every Monday, or on the first of every month.
3.8.2 Solution
print strftime("Today is day %d of the month and %j of the year.");
print 'Today is day '.date('d').' of the month and '.date('z').' of the year.';
3.8.3 Discussion
The two functions date( ) and strftime( )
don't behave identically. Days of the year start with 0 for date( ),
but with 1 for strftime( ). Table 3-4 contains all the day and week number
format characters date( ) and strftime( ) understand.
Type
|
strftime( )
|
date( )
|
Description
|
Range
|
|---|---|---|---|---|
Day
|
%d
|
d
|
Day of the month, numeric
|
01-31
|
Day
|
%j
|
z
|
Day of the year, numeric
|
001-366 for strftime( ); 0-365 for date( )
|
Day
|
%u
|
Day of the week, numeric (Monday is 1)
|
1-7
| |
Day
|
%w
|
w
|
Day of the week, numeric (Sunday is 0)
|
0-6
|
Day
|
%W
|
ISO 8601 day of the week, numeric (Monday is the first day of
the week)
|
0-6
| |
Week
|
%U
|
Week number in the year; numeric; first Sunday is the first day
of the first week
|
00-53
| |
Week
|
%V
|
W |
ISO 8601:1988 week number in the year; numeric; week 1 is the
first week that has at least four days in the current year; Monday is the first
day of the week
|
01-53
|
To print out something only on Mondays, use the w
formatting character to date( ) or the %w string with
strftime( ):
if (1 == date('w')) {
print "Welcome to the beginning of your work week.";
}
if (1 == strftime('%w')) {
print "Only 4 more days until the weekend!";
}
There are different ways to calculate week numbers and days in
a week, so be careful to choose the appropriate one. The ISO standard (ISO 8601), says that weeks begin on Mondays
and that the days in the week are numbered 1 (Monday) through 7 (Sunday). Week 1
in a year is the first week in a year with a Thursday in that year. This means
the first week in a year is the first week with a
majority of its days in that year. These week numbers range from 01 to 53.
Other week number standards range from 00 to 53, with days in a
year's week 53 potentially overlapping with days in the following year's week
00.
As long as you're consistent within your programs, you
shouldn't run into any trouble, but be careful when interfacing with other PHP
programs or your database. For example, MySQL's DAYOFWEEK( ) function treats Sunday as the
first day of the week, but numbers the days 1 to 7, which is the ODBC standard. Its WEEKDAY(
) function, however, treats
Monday as the first day of the week and numbers the days from 0 to 6. Its
WEEK( ) function lets you
choose whether weeks should start on Sunday or Monday, but it's incompatible
with the ISO standard.