3

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

2 Answers 2

2

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.

2
  • well I do because WordPress will not let me enter these years!
    – edelwater
    Commented Jan 24, 2011 at 16:41
  • 1
    it only ACCEPTS dates after Jan 01, 100 (before that the editor becomes red) BUT... when you click "update" strange things happen. The admin screen shows suddenly the current date, the edit thing shows suddenly Jan 1, 1970 and the post altogether is not on any of these permalinks if you have the date or time in the permalink :) (which may or may not be a bug)
    – edelwater
    Commented Jan 24, 2011 at 16:50
3

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.

1
  • i think i get it: as soon as the *nix world decides to migrate to 64 bit signed as standard all custom coding I have done will be for nothing... :( unless.. i find a 64 bit signed os support + have support for that inside wordpress build as a change request? ah.. no wait... my custom field SHOULD store a 64 bit signed integer so whenever the unix/windows/linux world decides that 2038 is becoming scary and standardizes on 64 bit signed integer that i can then migrate simply to the new system and only have that intermediate in a custom field i think.
    – edelwater
    Commented Jan 25, 2011 at 3:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.