首先感谢您花时间对此进行研究。
我将日期作为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时间戳格式传递它,直到呈现为止,因为:
- 它保持低负载,因为您传输的是整数而不是字符串
- 它使您能够在客户端上以不同的方式使用时间戳,而无需再次解析它。例如,
Date.now()/1000 - post.date
将为您提供自创建帖子以来的秒数,依此类推 - 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所指出的,在客户端执行通常更好,因为它既减少了传输的数据,又为您提供了更大的灵活性,而无需解析字符串。