Search code examples
phpjavascriptjquerydatephp4

How should I store a date in PHP for use with javascript?


What I want to do is make a script on the server read a text file, sort it, then output it to a javascript object (probably via JSON). The text file in question looks something like this:

13/09/2009,17/09/2009,Arbitrary dates
14/09/2009,18/09/2009,Some random comment
14/09/2010,18/12/2010,A comment to the dates
14/09/2010,18/09/2010,A subset of another date
14/09/2001,18/09/2002,The oldest date

The php to handle the filereading looks like this:

function loadDates()
{
    $dateFile = fopen("dates.txt", "rt");
    $dates = array();
    if($dateFile)
    {
        flock($dateFile,LOCK_SH);
        $i = 0;

        while(!feof($dateFile))
        {
            $text = fgets($dateFile);
            if($text !== FALSE)
            {
                $i++;
                $arr = explode(",",$text,3);
                //actual storage
                $dates[$i]['start']   = strtotime($arr[0]);
                $dates[$i]['end']     = strtotime($arr[1]);
                $dates[$i]['comment'] = $arr[2];
            }
        }
        fclose($dateFile);

        //sort by start date, then by end date
        foreach($dates as $key => $item)
        {
            $start[$key]  = $item['start'];
            $end[$key] = $item['end'];
        }
        array_multisort($start, SORT_ASC, $end, SORT_ASC, $dates);
        return $dates;
    }
    else
    {
        return FALSE;
    }
}

However, that stores unix timesstamps in the start and end dates. I would use the DateTime class, but I'm currently restricted to PHP 4.4. Ideally, I'd like to store the dates in a format that:

  1. Can be compared numerically
  2. Are human readable (allowing human editing of dates.txt)
  3. Are consistently formatted (ie "01-01-1900" is converted to "01/01/1900")
  4. Can be converted to a javascript Date object

How would I go about storing the dates so they satify these restrictions?


Solution

  • The safest is to use UNIX timestamps

    in javascript, you can use

    var mydate = new Date();
    mydate.getTime(); //timestamp
    mydate.setTime(your_timestamp); //set using timestamp
    

    in php the date function takes the timestamp as second parameter.

    see http://jp.php.net/manual/en/function.date.php and https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date

    EDIT:
    Also see strftime http://jp.php.net/manual/en/function.strftime.php

    EDIT:
    Note: the javascript function takes milliseconds, and the php functions use seconds. divide the output of the javascript by 1000 or use something like the following:

    Date.prototype.getTimeInSeconds = function() {
        return this.getTime()/1000;
    }
    
    var mydate = new Date();
    mydate.getTimeInSeconds(); //PHP-compatible timestamp