【问题标题】:Converting unix timestamp before sending it by json在通过json发送之前转换unix时间戳
【发布时间】:2012-04-04 22:57:26
【问题描述】:

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

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

非常感谢您的帮助。

【问题讨论】:

  • 这两个答案是否解决了您的问题?

标签: php javascript ajax json date


【解决方案1】:

在 JavaScript 中使用 Date 对象。

alert(new Date(post.date))

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

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

【讨论】:

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

    【讨论】:

    • 我想将它们都选为最佳答案,但不幸的是我不能!所以感谢你们的回答。这帮助我解决了我的问题! :)
    • 不用担心 - 我不需要代表。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    相关资源
    最近更新 更多