What is the best workaround for supporting all existing DATEs?

All we need is an easy explanation of the problem, so here it is.

I want to make a weblog that has with every date 1 or more weblog posts, e.g.:

Januari 24 Year 41 : Roman Emperor Caligula was murdered by Cassius Chaerea and the disgruntled Praetorian Guards. Caligula’s uncle Claudius was proclaimed emperor in his place.

or

Januari 1 Year 153 BC : Roman consuls begin their year in office.

or

Februari 1 Year 2038 : Humans survived

What would be the best way to do this in WordPress if I want to support URL hacking?

p.s. custom fields + custom posts + custom taxonomy was the first thing I thought of but maybe there are better alternatives relying on the current date system.

related: http://en.wikipedia.org/wiki/Unix_time#Representing_the_number

How to solve :

I know you bored from this bug, So we are here to help you! Take a deep breath and look at the explanation of your problem. We have many solutions to this problem, But we recommend you to use the first method because it is tested & true method that will 100% work for you.

Method 1

Unix time is defined as the amount of seconds since the “Unix epoch,” which is 00:00:00 UTC on 1 January 1970.

It works both forwards and backwards — so technically you shouldn’t have trouble representing dates all the way back to Jan. 1, year 1, but the numbers would be negative and extremely large.

EDIT: PHP appears not to be able to handle those dates easily, at least according to one basic test. Both echo $time = strtotime("January 1, 1"); and echo $time = strtotime("January 1, 0001"); result in 978325200.

I think the best option is, as you muse, categories. Whether or not you want to deal with custom categories might be a matter of preference, but I suspect normal categories with the names you lay out would work just fine.

Method 2

Not sure about WordPress specifics on processing date when saving post, but it stores post’s date in database under datetime type, which according to MySQL The DATETIME, DATE, and TIMESTAMP Types only has range of 1000-01-01 00:00:00 to 9999-12-31 23:59:59 and so won’t go back as far as you want.

So it is definitely better to store date separately (custom field makes sense) as string or timestamp.

Also strtotime() is usually awesome, but has limitations of its own:

The valid range of a timestamp is
typically from Fri, 13 Dec 1901
20:45:54 UTC to Tue, 19 Jan 2038
03:14:07 UTC
. (These are the dates
that correspond to the minimum and
maximum values for a 32-bit signed
integer.) Additionally, not all
platforms support negative timestamps,
therefore your date range may be
limited to no earlier than the Unix
epoch. This means that e.g. dates
prior to Jan 1, 1970 will not work on
Windows, some Linux distributions, and
a few other operating systems. PHP
5.1.0 and newer versions overcome this limitation though.

Overall I suspect that for such extreme dates you will need to write your own code or find some ready-made by third party.

Note: Use and implement method 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply