Use date( ) or strftime( ):
print strftime('%c'); print date('m/d/Y'); Tue Jul 30 11:31:08 2002 07/30/2002
Both date( ) and strftime( ) are flexible functions that can produce a formatted time string with a variety of components. The formatting characters for these functions are listed in Table 3-3. The Windows column indicates whether the formatting character is supported by strftime( ) on Windows systems.
Type |
strftime( ) |
date( ) |
Description |
Range |
Windows |
---|---|---|---|---|---|
Hour |
%H |
H |
Hour, numeric, 24-hour clock |
00-23 |
Yes |
Hour |
%I |
h |
Hour, numeric, 12-hour clock |
01-12 |
Yes |
Hour |
%k |
Hour, numeric, 24-hour clock, leading zero as space |
0-23 |
No |
|
Hour |
%l |
Hour, numeric, 12-hour clock, leading zero as space |
1-12 |
No |
|
Hour |
%p |
A |
AM or PM designation for current locale |
Yes |
|
Hour |
%P |
a |
am/pm designation for current locale |
No |
|
Hour |
G |
Hour, numeric, 24-hour clock, leading zero trimmed |
0-23 |
No |
|
Hour |
g |
Hour, numeric, 12-hour clock, leading zero trimmed |
0-1 |
No |
|
Minute |
%M |
I |
Minute, numeric |
00-59 |
Yes |
Second |
%S |
s |
Second, numeric |
00-61[3] |
Yes |
Day |
%d |
d |
Day of the month, numeric |
01-31 |
Yes |
Day |
%e |
Day of the month, numeric, leading zero as space |
1-31 |
No |
|
Day |
%j |
z |
Day of the year, numeric |
001-366 for strftime( ); 0-365 for date( ) |
Yes |
Day |
%u |
Day of the week, numeric (Monday is 1) |
1-7 |
No |
|
Day |
%w |
w |
Day of the week, numeric (Sunday is 0) |
0-6 |
Yes |
Day |
j |
Day of the month, numeric, leading zero trimmed |
1-31 |
No |
|
Day |
S |
English ordinal suffix for day of the month, textual |
"st," "th," "nd," "rd" |
No |
|
Week |
%a |
D |
Abbreviated weekday name, text for current locale |
Yes |
|
Week |
%A |
l |
Full weekday name, text for current locale |
Yes |
|
Week |
%U |
Week number in the year; numeric; first Sunday is the first day of the first week |
00-53 |
Yes |
|
Week |
%V |
W |
ISO 8601:1988 week number in the year; numeric; week 1 is the first week that has at least 4 days in the current year; Monday is the first day of the week |
01-53 |
No |
Week |
%W |
Week number in the year; numeric; first Monday is the first day of the first week |
00-53 |
Yes |
|
Month |
%B |
F |
Full month name, text for current locale |
Yes |
|
Month |
%b |
M |
Abbreviated month name, text for current locale |
Yes |
|
Month |
%h |
Same as %b |
No |
||
Month |
%m |
m |
Month, numeric |
01-12 |
Yes |
Month |
n |
Month, numeric, leading zero trimmed |
1-12 |
No |
|
Month |
t |
Month length in days, numeric |
28, 29, 30, 31 |
No |
|
Year |
%C |
Century, numeric |
00-99 |
No |
|
Year |
%g |
Like %G, but without the century |
00-99 |
No |
|
Year |
%G |
ISO 8601 year with century; numeric; the four-digit year corresponding to the ISO week number; same as %y except if the ISO week number belongs to the previous or next year, that year is used instead |
No |
||
Year |
%y |
y |
Year without century, numeric |
00-99 |
Yes |
Year |
%Y |
Y |
Year, numeric, including century |
Yes |
|
Year |
L |
Leap year flag (yes is 1) |
0, 1 |
No |
|
Timezone |
%z |
O |
Hour offset from GMT, +/-HHMM (e.g., -0400, +0230) |
-1200-+1200 |
Yes, but acts like %Z |
Timezone |
%Z |
T |
Time zone, name, or abbreviation; textual |
Yes |
|
Timezone |
I |
Daylight saving time flag (yes is 1) |
0, 1 |
No |
|
Timezone |
Z |
Seconds offset from GMT; west of GMT is negative, east of GMT is positive |
-43200-43200 |
No |
|
Compound |
%c |
Standard date and time format for current locale |
Yes |
||
Compound |
%D |
Same as %m/%d/%y |
No |
||
Compound |
%F |
Same as %Y-%m-%d |
No |
||
Compound |
%r |
Time in AM or PM notation for current locale |
No |
||
Compound |
%R |
Time in 24-hour notation for current locale |
No |
||
Compound |
%T |
Time in 24-hour notation (same as %H:%M:%S) |
No |
||
Compound |
%x |
Standard date format for current locale(without time) |
Yes |
||
Compound |
%X |
Standard time format for current locale(without date) |
Yes |
||
Compound |
r |
RFC 822 formatted date (e.g., "Thu, 22 Aug 2002 16:01:07 +0200") |
No |
||
Other |
%s |
U |
Seconds since the epoch |
No |
|
Other |
B |
Swatch Internet time |
No |
||
Formatting |
%% |
Literal % character |
Yes |
||
Formatting |
%n |
Newline character |
No |
||
Formatting |
%t |
Tab character |
No |
[3] The range for seconds extends to 61 to account for leap seconds.
The first argument to each function is a format string, and the second argument is an epoch timestamp. If you leave out the second argument, both functions default to the current date and time. While date( ) and strftime( ) operate over local time, they each have UTC-centric counterparts (gmdate( ) and gmstrftime( )).
The formatting characters for date( ) are PHP-specific, but strftime( ) uses the C-library strftime( ) function. This may make strftime( ) more understandable to someone coming to PHP from another language, but it also makes its behavior slightly different on various platforms. Windows doesn't support as many strftime( ) formatting commands as most Unix-based systems. Also, strftime( ) expects its formatting characters to each be preceded by a % (think printf( )), so it's easier to produce strings with lots of interpolated time and date values in them.
For example, at 12:49 P.M. on July 15, 2002, the code to print out:
It's after 12 pm on July 15, 2002
with strftime( ) looks like:
print strftime("It's after %I %P on %B %d, %Y");
With date( ) it looks like:
print "It's after ".date('h a').' on '.date('F d, Y');
Non-date-related characters in a format string are fine for strftime( ), because it looks for the % character to decide where to interpolate the appropriate time information. However, date( ) doesn't have such a delimiter, so about the only extras you can tuck into the formatting string are spaces and punctuation. If you pass strftime( )'s formatting string to date( ):
print date("It's after %I %P on %B%d, %Y");
you'd almost certainly not want what you'd get:
131'44 pmf31eMon, 15 Jul 2002 12:49:44 -0400 %1 %P o7 %742%15, %2002
To generate time parts with date( ) that are easy to interpolate, group all time and date parts from date( ) into one string, separating the different components with a delimiter that date( ) won't translate into anything and that isn't itself part of one of your substrings. Then, using explode( ) with that delimiter character, put each piece of the return value from date( ) in an array, which is easily interpolated in your output string:
$ar = explode(':',date("h a:F d, Y")); print "It's after $ar[0] on $ar[1]";
Documentation on date( ) at http://www.php.net/date and strftime( ) at http://www.php.net/strftime; on Unix-based systems, man strftime for your system-specific strftime( ) options; on Windows, see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_strftime.2c_.wcsftime.asp for strftime( ) details.
Copyright © 2003 O'Reilly & Associates. All rights reserved.