在通过json发送unix时间戳之前进行转换


Converting unix timestamp before sending it by json

首先感谢您花时间对此进行研究。

我将日期作为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发送之前将其转换为可读日期?甚至事后?

非常感谢你的帮助。

在JavaScript中使用Date对象。

alert(new Date(post.date))

注意:最好一直以UNIX时间戳格式传递它,直到呈现为止,因为:

  1. 它保持低负载,因为您传输的是整数而不是字符串
  2. 它使您能够在客户端上以不同的方式使用时间戳,而无需再次解析它。例如,Date.now()/1000 - post.date将为您提供自创建帖子以来的秒数,依此类推
  3. UNIX时间戳不区分时区。当在客户端上呈现时,它将以本地时区和格式显示。若在服务器上渲染,它将在服务器的时区中,并使用服务器的区域设置

当然,从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所指出的,在客户端执行通常更好,因为它既减少了传输的数据,又为您提供了更大的灵活性,而无需解析字符串。