1

首先感谢您花时间研究这个问题。

我将日期作为unix时间戳存储在我的数据库中,当我使用以下方式获取所有信息时:

        while($row = mysql_fetch_assoc($result)) {
        $posts[] = $row;
    }
    /* return the posts in the JSON format */
    return json_encode($posts);

当我尝试使用以下方法获取日期时,该日期仅作为 unix 时间戳提供:

var postHandler = function(postsJSON) {
 $.each(postsJSON,function(i,post) {
alert(post.date);
}
}

有没有办法在通过 JSON 发送之前将其转换为可读日期?甚至之后?

非常感谢你的帮助。

4

2 回答 2

2

当然,从 PHP 方面你可以这样做:

while($row = mysql_fetch_assoc($result)) {
    $row['your_date_field'] = date('r', $row['your_date_field']);
    $posts[] = $row;
}

(您可以随意自定义传递给的格式字符串date()'r'这只是一个简单的默认值。)


从 Javascript 方面,您可以这样做:

new Date(post.date);

当呈现为字符串时,它将格式化为默认日期格式,或者您可以在Date对象上使用其他方法来获取其他格式。


您使用哪种方法取决于您,但正如 dragon 指出的那样,在客户端执行通常更好,因为它既减少了传输的数据,又为您提供了更大的灵活性,而无需解析字符串。

于 2012-04-04T23:02:11.557 回答
2

在 JavaScript 中使用Date对象。

alert(new Date(post.date))

注意:最好在渲染之前一直以 UNIX 时间戳格式传递它,因为:

  1. 它使有效负载保持在较低水平,因为您传输的是整数而不是字符串。
  2. 它使您可以在客户端以不同方式使用时间戳,而无需再次解析它。例如Date.now()/1000 - post.date,将为您提供自帖子创建以来的秒数,依此类推。
  3. UNIX 时间戳对时区不敏感。在客户端呈现时,它将采用本地时区和格式。如果您在服务器上渲染它,它将位于服务器的时区并使用服务器的区域设置。
于 2012-04-04T23:02:38.453 回答