代码之家  ›  专栏  ›  技术社区  ›  Lyon

从php的time()读取的javascript日期/时间

  •  13
  • Lyon  · 技术社区  · 14 年前

    是否可以让javascript计算从php返回的时间戳? time() 以可读格式显示,如“Sun,2010年4月18日下午4:00”?

    4 回复  |  直到 11 年前
        1
  •  27
  •   Gumbo    14 年前

    使用 Date object 这样做:

    new Date(<?php echo time(); ?>*1000)
    

    您需要将Unix时间戳乘以1000,因为 Date 时间戳应以毫秒为单位。

    为了格式化日期,您可以使用这个 Date.format method ( 日期 没有内置)。

        2
  •  2
  •   Pointy    14 年前

    你一定要小心做这些事情。当您取一个服务器端时间值,它是传统的“从epoch边界开始的秒数(或毫秒)”值,然后将其转换为某种“日期”对象时,就会在适合上下文区域设置的时区中进行转换。

    当你在芝加哥有一台服务器,夏威夷有人在你的网站上使用你的网站时,问题就出现了,比如在一次聚会之后——毫无疑问,有一次“夏威夷”的活动,有烤猪和草边的舞女,温暖的热带天空下罕见的夜晚,洋溢着异国情调的鲜花——现在已经很晚了。天哪,快午夜了!当我给她写派对的时候,她会怎么想?

    参加聚会的人晚上11:30坐下来使用你的网站。现在,当然,您的服务器位于夏威夷以东,认为现在是早上5:30,而且日期比参加派对的人在给妈妈的速记本上记下的日期晚了一天。因此,您的服务器将其时间值写入一个网页,如这里的答案中所述,并且-正确地-本地夏威夷时间会显示在我们参加派对的客人的酒店房间的页面上。

    问题是:如果是那样的话 地方的 时间从某个表单字段返回到您的应用程序,应用程序将其视为本地时间。 在芝加哥 ,那么您的网站将获得昨天的日期。取决于你的应用程序是好的还是不好的-关键是,你必须跟踪 哪里 日期(用普通的日历符号表示)来自于日期所在的VIS-A-VIS。 习惯于 .

    你当然可以有相反的问题。也就是说,如果您的服务器总是在其本地时区中呈现日期,那么世界上其他地方的用户将看到混淆(明显错误)的日期和时间值,因此界面必须清楚这些值的含义。当您的站点提供涉及时间表的服务时,这些问题变得很重要。如果可以调度操作,那么界面将事情保持在同一级别是很重要的,这样“4月30日晚上10:00”就意味着日期和时间 在服务器上 或者在区域设置日程的日期和时间。不管是哪种情况,你都要小心保持一致。

        3
  •  2
  •   VolkerK    14 年前

    除了数字unix时间戳,还可以发送日期的文本表示, Date.parse() 理解。
    也许这只是我对全球变暖的贡献,但我认为使用一种更具人类可读性并包含时区信息的格式有好处。

    例如

    <?php
    // I have "decided" America/Los_Angeles fits most of my audience
    date_default_timezone_set('America/Los_Angeles');
    $now = time();
    $yesterday = strtotime('yesterday', $now);
    // March 27, 1976 08:00:00 tz:America/Los_Angeles
    $someotherdate = mktime(8, 0, 0, 3, 27, 1976)
    ?><html>
      <head><title>...</title>
        <script type="text/javascript" src="jquery.min.js"></script>
        <script type="text/javascript">
          function foo() {
            $('.datetime').each( function() {
              var t = $(this).text();
              t = new Date(Date.parse(t)).toLocaleString();
              $(this).text(t);
            });
          }
        </script>
      </head>
      <body>
        <div><span class="datetime"><?php echo date(DateTime::RSS, $now); ?></span></div>
        <div><span class="datetime"><?php echo date(DateTime::RSS, $yesterday); ?></span></div>
        <div><span class="datetime"><?php echo date(DateTime::RSS, $someotherdate); ?></span></div>
        <button onclick="foo()">to local time</button>
      </body>
    </html>
    

    这张照片

    Sat, 17 Apr 2010 04:40:15 -0700
    Fri, 16 Apr 2010 00:00:00 -0700
    Sat, 27 Mar 1976 08:00:00 -0800
    

    在我的浏览器中和(因为我的本地时区是欧洲/柏林、CET、UTC+1/2)点击 to local time 按钮

    Samstag, 17. April 2010 13:40:15
    Freitag, 16. April 2010 09:00:00
    Samstag, 27. März 1976 17:00:00
    
        4
  •  0
  •   Scott Yang    11 年前

    现在是2013年,随着越来越多的人从在PHP端处理SQL结果转向在JSON中传递结果和在客户机端处理,我认为moment.js本身就值得关注,因为它提供了简单的替代物,以javascript形式替换php的strtotime()和date()函数,还有更多。

    只包括:

    <script src="SCRIPT_DIR/moment.min.js" type="text/javascript"></script>
    

    然后它就简单到:

    // Simulates ajax response
    var data = { someDate: "2023-08-23 11:52:39" }
    
    // .unix() converts to Unix timestamp: 1692816759
    moment(data.someDate).unix();
    
    // Displaying it in a readable format
    // Aug 23, 11:52 AM
    moment("2023-08-23 11:52:39").format('MMM D, hh:mm A');
    
    // Now
    moment();
    
    // Support for manipulation and chaining
    moment().add('days', 7).subtract('months', 1).hours(15).minutes(0).seconds(0);
    

    您可以在此处获取5.5KB JS文件:

    http://momentjs.com/

    更多的文件在这里:

    http://momentjs.com/docs/