【问题标题】:Convert 2010-04-16 16:30:00 to "Tomorrow Afternoon"将 2010-04-16 16:30:00 转换为“明天下午”
【发布时间】:2011-02-08 05:51:24
【问题描述】:

将 2010-04-16 16:30:00 转换为“明天下午”或将另一个日期转换为“今天下午”、“明年”、“下周星期三”。你得到图片。 有人知道可以做到这一点的 PHP 或 Javascript 库吗?

【问题讨论】:

    标签: php javascript date formatting


    【解决方案1】:

    我认为您可以通过这里所说的内容取得长足进步:Calculate relative time in C#
    逻辑就在那里,如果其他语言的解决方案适合您,那么做 javascript 等效项并不难。

    【讨论】:

      【解决方案2】:

      可能有更优雅的解决方案(寻找自然语言格式),但我个人找不到任何解决方案。

      我建议计算从now 到您正在格式化的日期的距离,并使用阈值。

      伪解:

      diff = now - date
      
      if (diff < one_day) 
          format for today
      if (diff < two_days) 
          format for tomorrow
      if (diff < one_week)
          format using days from now
      .
      .
      .
      

      只要您使用与abs 的值diff 进行比较,比较将适用于过去和未来的日期。通过检查 diff 是正数还是负数来显示 timeunit ago 或 timeunit from now。

      对于早上、下午、晚上等,您只需要检查日期中的时间,对于您点击的格式类型,将时间显示为数字(远)或自然语言(最近或临近日期)。

      【讨论】:

      • 对于未来的日期应该是diff = date - now,这比这要复杂一些,因为明天可能还有不到一天的差异。
      • 无所谓,只要比较diff的绝对值即可。但否则你是正确的,要比较的日期应该是阈值日期的午夜时间戳。
      【解决方案3】:
                         function gett($sam){
                         $times = time() - $sam;
                          if ($times == 60){
                          $times = "a minute ago";
                          }
              if (($times != 1) && ($times < 60) && ($times != 0)){
              $times = "$times seconds ago";
              }
              if ($times == 0){
              $times = "less than a second ago";
              }
              if ($times == 1){
              $times = "a second ago";
              }
      
              if ($times > 60 && $times < 3600){
              $times = ceil($times/60)." minutes ago";
              }
      
              if($times == 3600){
              $times = "an hour ago";
              }
              if($times > 3600 && $times < 86400){
              $times = ceil($times/3600)." hours ago";
              }
              if($times == 86400){
              $times = "a day ago";
              }
              if($times > 86400){
              $times = ceil($times/86400)." days ago";
              }
              return $times; }
      

      用法: $updated = gett($timestamp); 其中 $timestamp 是不言自明的......

      【讨论】:

        【解决方案4】:

        从此链接-> How do I calculate relative time in C#?

        function posted(t) { 
        var now = new Date(); 
        var diff = parseInt((now.getTime() - Date.parse(t)) / 1000); 
        if (diff < 60) { return 'less than a minute ago'; } 
        else if (diff < 120) { return 'about a minute ago'; } 
        else if (diff < (2700)) { return (parseInt(diff / 60)).toString() + ' minutes ago'; } 
        else if (diff < (5400)) { return 'about an hour ago'; } 
        else if (diff < (86400)) { return 'about ' + (parseInt(diff / 3600)).toString() + ' hours ago'; } 
        else if (diff < (172800)) { return '1 day ago'; }  
        else {return (parseInt(diff / 86400)).toString() + ' days ago'; } 
        } 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-25
          • 2021-07-10
          • 1970-01-01
          • 2023-03-02
          • 2016-05-28
          相关资源
          最近更新 更多