0

我想做的是让服务器上的脚本读取文本文件,对其进行排序,然后将其输出到 javascript 对象(可能通过 JSON)。有问题的文本文件如下所示:

13/09/2009,17/09/2009,任意日期
14/09/2009,18/09/2009,一些随机评论
14/09/2010,18/12/2010,对日期的评论
14/09/2010,18/09/2010,另一个日期的子集
14/09/2001,18/09/2002,最早的日期

处理文件读取的 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 Date 对象

我将如何存储日期以使它们满足这些限制?

4

2 回答 2

2

最安全的是使用 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.phphttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date

编辑:
另见 strftime http://jp.php.net/manual/en/function.strftime.php

编辑:
注意:javascript函数需要毫秒,php函数使用秒。将 javascript 的输出除以 1000 或使用以下内容:

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

var mydate = new Date();
mydate.getTimeInSeconds(); //PHP-compatible timestamp
于 2009-09-13T15:06:29.040 回答
0

这样存储日期:

19991231 = 1999 年 12 月 31 日

20000704 = 2000 年 7 月 4 日

人类可读,绝对可排序,并且您可以为转换创建一个 JavaScript 函数。

我将为您提供一个来自我精神错乱的黑客:

(这假设 x 是 yyyymmdd 形式的日期)

new Date((x-(x%10000))%9999,(((x%10000)-(x%100))%99)-1,x%100)
于 2009-09-13T16:15:58.470 回答