Generates timestamps from strings, displays info about dates and formats them in a neat way.
This online tool shows information about a given Unix timestamps as well as converting arbitrary time string (e.g. «1 January 1999») into timestamp and formatting timestamp according to various RFC/ISO/W3C standards or by a custom format string. ¶
All fields are set to current time by default so feel free to roll the dice right away and see what this tool has to offer. ¶
UNIX timestamp (or Unix time) is a number of seconds passed since 1st January 1970. As name states timestamps are mostly used in *nix systems (including Linux and FreeBSD) to represent exact date & time values. For example, number 1303578469 stands for 17:07:49, 23rd April 2011 (try it yourself).
Timestamp doesn't represent leap seconds and thus it's not a proper UTC. ¶
Technically timestamp is (usually) a signed 32-bit integer and as a consequence it's incapable of representing dates after 03:14:08 UTC on 19 January 2038 – so-called Year 2038 problem. When the value overflows the time for Unix systems using traditional signed time_t type will jump back by 68 years. ¶
That said, Microsoft DOS had a valid time range from 1980 untill 2099 years. ¶
There are other formats used to represent time. For example, Windows systems use 16-byte records to represent file times which have a wider range of years (1601 through 30827) than Unix time does (1970 through 2038 excluding negative timestamps) and is also capable of representing milliseconds. ¶
This is a standalone PHP class – all-in-one solution for formatting date and time. It focuses on native standards and easy to read and remember format string. It also adds (by means of format string) a number of functions that do not exist in standard routines – such as relative time («3 weeks ago»). ¶
Full reference, as well as download section, can be found at the project's homepage here. Here most commonly used format strings are listed. ¶
Numeric format strings often have either one or two hash symbols (#) following them. One hash symbol tells that it's indeed a format string while two hash symbols also pad it with a zero if it's smaller than 10.
For year (y##) this is an exception as two hash symbols stand for 4-digit year year instead of 2-digit (y#). ¶
Similar idea goes for word format strings that have either one or two underscores (_) following: one underscore is required for a format string while two make it output full name instead of short (e.g. «January» instead of «Jan»). ¶
Example DateFmt call (see the reference): ¶
echo DateFmt::Format('D__, d##my'); // => Tuesday, 26/04/2011
| Format string | Description | Examples |
|---|---|---|
| Full date/time | ||
| h#m and h##m | National time without seconds | 3:26 AM and 03:26 AM |
| h#ms and h##ms | National time with seconds | 3:26:09 AM and 03:26:09 AM |
| d#m and d##m | National date without year | 5/04 and 05/04 |
| d#my and d##my | National date with year | 5/04/2011 and 05/04/2011 |
| Date/time format strings | ||
| s# s## m# m## | Second and minute with (##) and without (#) leading zeros. | 0…59, 0…59 |
| h# h## H# H## | Hour in 12- and 24 hour format with (##) and without (#) leading zeros. | 1…12, 0…23 |
| d# d## mo# mo## y# y## | Day, month (note: it's "mo", "m" is used to specify minutes), year with (##) and without (#) leading zeros. | 1…31, 1…12, 00…99, 1970…2038 |
| Names | ||
| d_ d__ D_ D__ | Short (_) and full (__) day names in native (usually capitalized, "D") and lower-case ("d") forms. | Mon … Sun, Monday … Sunday |
| m_ m__ M_ M__ | Short (_) and full (__) month names in native (usually capitalized, "M") and lower-case ("m") forms. | Jan … Dec, Jan … December |
| y_ y__ | Native word for word "year" in short and full forms. | "y.", "year" |
| Time ago (see AGO[] and IF[]) | ||
| AGO[*] | Instead of asterisk the following characters can be used (for seconds...years): s m h d w o y. | 2 days ago, 8 months later |
| AGO-SHORT[*] | A form of AGO[] that uses short word forms for more concise output. | 2d ago, 8m later |
| AGO[*]IF-FAR[…] | A conditional form of AGO[] that switches to usual formating (of Date/time above) if given date is too far. | 2 days ago, 3/11/2010 |
| AGO-SHORT[*]IF-FAR[…] | A conditional form of AGO-SHORT[], similar to AGO[]IF but uses short word forms. | 3h ago, 3/11/2010 |
| AGO[*]_ | Suppress ago/later words. Also works for IF as: AGO[*]IF[…]_ | 2 days, 8 hours |
| "At"-time (see AT[]) | ||
| [d#my]AT h#m | Uses native language settings to output proper word form and preposition for "at". Can be combined with other functions (AGO, IF). | 12/01/2011 at 7:07 PM |
| Posted at AT[D__, d# M__##] | THe same as []AT (suffix "AT") but doesn't output the preposition – only changes word forms. This form makes sense for languages with inflexion changes like Russian. | Posted at Wednesday, 12 February |
Full reference to DateFmt format string is located here. ¶
Standard PHP function date() supports a large variety of format strings and it's fast and convenient to use – for example, to check if two dates are about the same day the following code can be used: ¶
date('dmy', $date1) == date('dmy', $date2)
However, when using it to format more or less complicated string there are at least 3 problems: ¶
Since date is a standard PHP function it doesn't need any external libraries and is used like this: ¶
echo date('d.m.y H:i'); // => 26.04.11 14:52
Format strings passed as date()'s first argument are listed below. ¶
¶| Format string | Description | Examples |
|---|---|---|
| Full date/time | ||
| c | ISO 8601 date | 2004-02-12T15:19:21+00:00 |
| r | RFC 2822 date | Thu, 21 Dec 2000 16:01:07 +0200 |
| Day | ||
| z | Day of year without leading zeros | 0 1 … 365 |
| d | Day of month with leading zeros | 01 02 … 31 |
| j | Day of month without leading zeros | 1 2 … 31 |
| l | Full day name | Monday … Sunday |
| D | Short day name (3 letters) | Mon … Sun |
| S | English suffix for day of month (2 letters) | st, nd, rd, th |
| w | Day number for current week (0-based) | 1 (Sunday), 2 (Monday) … 7 (Saturday) |
| N | Day number for current week (1-based according to ISO-8601) | 1 (Monday), 2 (Tuesday) … 7 (Sunday) |
| Week | ||
| W | ISO-8601 week number of year (1-based; weeks start on Monday); with leading zeros. | 01 02 … 42 |
| Month | ||
| n | Month number of year without leading zeros (1-based) | 1 2 … 12 |
| m | Month number of year with leading zeros (1-based) | 01 02 … 12 |
| F | Full month name | January … December |
| M | Short month name | Jan … Dec |
| t | Number of days in given month (1-based) | 28, 29, 30, 31 |
| Year | ||
| Y | 4 digits for year | 1999, 2005, 2015 |
| y | 2 digits for year | 99, 05, 15 |
| L | 1 if given year is leap, 0 otherwise | 1, 0 |
| o | ISO-8601 year number. This is the same as Y, except that if the ISO week number (W) belongs to the previous or next year, that year is used instead. | 1999, 2005, 2015 |
| Hour | ||
| G | 24-hour hour without leading zeros | 0 1 … 23 |
| H | 24-hour hour with leading zeros | 00 01 … 23 |
| g | 12-hour hour without leading zeros | 1 2 … 12 |
| h | 12-hour hour with leading zeros | 01 02 … 12 |
| a | Lowercase Ante Meridiem and Post Meridiem | am, pm |
| A | Uppercase Ante Meridiem and Post Meridiem | AM, PM |
| Other time strings | ||
| i | Minutes with leading zeros | 00 01 … 59 |
| s | Seconds with leading zeros | 00 01 … 59 |
| U | Timestamp (see time()) | 1303580175 |
| u | Microseconds | 654321 |
| B | Swatch Internet time | 000 … 999 |
| Timezone | ||
| e | Timezone identifier | UTC, GMT, Atlantic/Azores |
| T | Timezone abbreviation | EST, MDT |
| O | Difference to GMT in hours | +0200 |
| p | Difference to GMT with colon between hours and minutes | +02:00 |
| Z | Timezone offset in seconds. The offset for timezones west of UTC is always negative, and for those east of UTC is always positive. | -43200 … 50400 |
| I | 1 if DST is in effect, 0 otherwise | 1, 0 |
There's another PHP function used to format date & time – strftime. It's used less often that the date function. It differs from it in the way format string is interpreted: control characters (e.g. «d» for day) are prefixed with a percent sign (%) to avoid collisions with normal word characters (which is a common problem for date). This is where its name comes from – standard printf() function also formats strings in this way. ¶
strftime() has the same format strings as date() with a few exceptions. ¶
An example of how this function is used: ¶
echo strftime("%d.%m.%y %H:%M"),"\n"; // => 26.04.11 15:21
You can find the list of strftime()'s format strings in the PHP manual. ¶