0

私がやりたいのは、サーバー上のスクリプトにテキストファイルを読み取らせ、それを並べ替えてから、(おそらくJSONを介して)javascriptオブジェクトに出力することです。問題のテキストファイルは次のようになります。

2009年9月13日、2009年9月17日、任意の日付
2009年9月14日、2009年9月18日、ランダムなコメント
2010年9月14日、2010年12月18日、日付へのコメント
2010年9月14日、2010年9月18日、別の日付のサブセット
2001年9月14日、2002年9月18日、最も古い日付

ファイル読み取りを処理する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現在はPHP4.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では、date関数はタイムスタンプを2番目のパラメーターとして受け取ります。

http://jp.php.net/manual/en/function.date.php およびhttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Dateを参照してください

編集:
strftimehttp://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 に答える