【问题标题】:How should I store a date in PHP for use with javascript?我应该如何在 PHP 中存储日期以与 javascript 一起使用?
【发布时间】:2009-09-13 14:54:26
【问题描述】:

我想做的是让服务器上的脚本读取文本文件,对其进行排序,然后将其输出到 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 对象

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

【问题讨论】:

    标签: php javascript jquery date php4


    【解决方案1】:

    最安全的是使用 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

    编辑:
    另见 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
    

    【讨论】:

    • 你忘了乘/除以 1000。
    【解决方案2】:

    这样存储日期:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 2011-10-26
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多