Как я должен хранить дату в PHP для использования с JavaScript? - PullRequest
0 голосов
/ 13 сентября 2009

Я хочу сделать так, чтобы скрипт на сервере читал текстовый файл, сортировал его, а затем выводил его в объект javascript (возможно, через JSON). Данный текстовый файл выглядит примерно так:

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

PHP для обработки чтения файлов выглядит так:

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;
    }
}

Тем не менее, в нем хранятся метки времени Unix в начальной и конечной датах. Я бы использовал класс DateTime, но в настоящее время я ограничен PHP 4.4. В идеале я хотел бы хранить даты в формате, который:

  1. Можно сравнить численно
  2. Удобен для чтения человеком (позволяет редактировать dates.txt)
  3. последовательно отформатированы (т.е. "01-01-1900" преобразуется в "01/01/1900")
  4. Может быть преобразован в объект даты типа JavaScript

Как мне сохранить даты, чтобы они утратили эти ограничения?

Ответы [ 2 ]

2 голосов
/ 13 сентября 2009

Самое безопасное - использовать метки времени UNIX

в JavaScript, вы можете использовать

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

в php функция даты принимает метку времени в качестве второго параметра.

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

EDIT:
Также смотрите strftime http://jp.php.net/manual/en/function.strftime.php

EDIT:
Примечание: функция javascript занимает миллисекунды, а функции php используют секунды. разделите вывод javascript на 1000 или используйте что-то вроде следующего:

Date.prototype.getTimeInSeconds = function() {
    return this.getTime()/1000;
}

var mydate = new Date();
mydate.getTimeInSeconds(); //PHP-compatible timestamp
0 голосов
/ 13 сентября 2009

Храните даты так:

19991231 = 31 декабря 1999

20000704 = 4 июля 2000

Удобочитаемый, определенно сортируемый, и вы можете сделать JavaScript-функцию для преобразования.

Я предоставлю тебе взломать из моего невменяемого разума:

(предполагается, что x - это дата в формате ггггммдд)

new Date((x-(x%10000))%9999,(((x%10000)-(x%100))%99)-1,x%100)
...