PHP Date Formats

PHP offers a couple of ways to format a local time/date: date() and strftime(). The first is possibly the most commonly used. date() offers many ways to format a date as well as providing useful formatting parameters for things like identifying a leap year. strftime() will format a local time/date according to locale settings so is useful when dealing with languages.

Both functions use similar formatting parameters (apart from the fact that strftime() needs a % in front of the parameter). There are some differences though (and in some cases no equivalent). For example:-

echo strftime('%Y-%m-%d %H:%M:%S'); // returns '2014-07-02 21:02:00'
echo date('Y-m-d H:i:s'); // returns '2014-07-02 21:02:00'

There have been a few occasions recently where I’ve needed to switch from using one to the other. While both methods are well documented it can be frustrating working out the equivalent parameters (or identifying where a parameter is not available in the other method). To help, I’ve put together the comparison tables below.


date strftime Return Value
D %a Mon through Sun
l %A Monday through Sunday
d %d 01 to 31
j %e 1 to 31
%j 001 to 366 (day of the year)
z 0 to 365 (day of the year)
N %u 1 (for Monday) through 7 (for Sunday)
w %w 0 (for Sunday) through 6 (for Saturday)
S st, nd, rd or th (English ordinal suffix for the day of the month)


date strftime Return Value
%U e.g. 13 (for the 13th full week of the year, starting with the first Sunday as the first week)
%V 01 through 53 (week number of the given year, starting with the first week of the year with at least 4 weekdays, with Monday being the start of the week)
W %W e.g. 42 (for the 42nd full week of the year, starting with the first Monday as the first week)


date strftime Return Value
M %b or %h Jan through Dec
F %B January through December
m %m 01 (for January) through 12 (for December)
n 1 (for January) through 12 (for December)
t 28 through 31 (number of days in month)


date strftime Return Value
%C Two digit representation of the century, e.g. 19 for 20th Century
%g Two digit representation of the year going by ISO-8601:1988 standards
o %G The full four-digit version of %g
y %y Two digit representation of the year, e.g. 14 for 2014
Y %Y Four digit representation of the year, e.g. 2014
L Whether it’s a leap year: 1 if it is a leap year, 0 otherwise


date strftime Return Value
H %H 00 through 23 (two digit representation of the hour in 24-hour format)
%k 0 through 23 (two digit representation of the hour in 24-hour format, with a space preceding single digits)
G 1 through 23 (hour in 24-hour format)
h %I 01 through 23 (two digit representation of the hour in 12-hour format)
g %l 1 through 12 (hour in 12-hour format)
a %P am or pm
A %p AM or PM
i %M 00 through 59 (minutes)
s %S 00 through 59 (seconds)
u Microseconds, e.g. 654321
U %s Unix Epoch Time timestamp (same as the time() function)
Swatch Internet Time
B 000 through 999


date strftime Return Value
O %z Timezone offset, e.g. -0500 for US Eastern Time
P Timezone offset, e.g. -05:00 for US Eastern Time
T %Z Timezone abbreviation, e.g. EST for US Eastern Time
e e.g. UTC, GMT or Atlantic/Azores
I 1 if Daylight Saving Time, 0 otherwise
Z Timezone offset in seconds

Full Date/Time

date strftime Return Value
%r Same as %I:%M:%S %p, e.g. 09:34:17 PM
%R Same as %H:%M, e.g. 21:34
%X Preferred time representation based on locale, e.g. 03:59:16 or 15:59:16
%D Same as %m/%d/%y, e.g. 06/29/14
%F Same as %Y-%m-%d, e.g. 2014-06-29
%x Preferred date representation based on locale, e.g. 06/29/14
Date and Time
%c Preferred date and time stamp based on locale, e.g. Tue Feb 5 00:45:10 2009
c ISO 8601 date, e.g. 2004-02-12T15:19:21+00:00
r RFC 2822 formatted date, e.g. Thu, 21 Dec 2000 16:01:07 +0200


date strftime Return Value
%n A new line character (\n)
%t A tab character (\t)
% %% A literal percentage character (%)

Full Documentation

You’ll find the full documentation for these date formats and the date() and strftime() functions on the website:-

Related Content

Published on


  1. vivek |

    GREAT! I found single digit day format code only here!

  2. Ralf |

    Thanks a lot for putting this together. So there is definitely no way to have single digit months with strftime? I don’t get it. Must be about half the planet who needs this. Or only a third, maybe?