浏览代码

解决huamn函数无法格式未来时的问题

Henry 3 年之前
父节点
当前提交
75141e192d
共有 2 个文件被更改,包括 23 次插入12 次删除
  1. 7 0
      application/admin/lang/zh-cn.php
  2. 16 12
      extend/fast/Date.php

+ 7 - 0
application/admin/lang/zh-cn.php

@@ -114,6 +114,13 @@ return [
     '%d week%s ago'                                         => '%d周前',
     '%d month%s ago'                                        => '%d月前',
     '%d year%s ago'                                         => '%d年前',
+    '%d second%s after'                                     => '%d秒后',
+    '%d minute%s after'                                     => '%d分钟后',
+    '%d hour%s after'                                       => '%d小时后',
+    '%d day%s after'                                        => '%d天后',
+    '%d week%s after'                                       => '%d周后',
+    '%d month%s after'                                      => '%d月后',
+    '%d year%s after'                                       => '%d年后',
     'Set to normal'                                         => '设为正常',
     'Set to hidden'                                         => '设为隐藏',
     'Recycle bin'                                           => '回收站',

+ 16 - 12
extend/fast/Date.php

@@ -124,25 +124,29 @@ class Date
      */
     public static function human($remote, $local = null)
     {
-        $timediff = (is_null($local) || $local ? time() : $local) - $remote;
-        $chunks = array(
-            array(60 * 60 * 24 * 365, 'year'),
-            array(60 * 60 * 24 * 30, 'month'),
-            array(60 * 60 * 24 * 7, 'week'),
-            array(60 * 60 * 24, 'day'),
-            array(60 * 60, 'hour'),
-            array(60, 'minute'),
-            array(1, 'second')
-        );
+        $time_diff = (is_null($local) || $local ? time() : $local) - $remote;
+        $tense = $time_diff < 0 ? 'after' : 'ago';
+        $time_diff = abs($time_diff);
+        $chunks = [
+            [60 * 60 * 24 * 365, 'year'],
+            [60 * 60 * 24 * 30, 'month'],
+            [60 * 60 * 24 * 7, 'week'],
+            [60 * 60 * 24, 'day'],
+            [60 * 60, 'hour'],
+            [60, 'minute'],
+            [1, 'second']
+        ];
+        $name = 'second';
+        $count = 0;
 
         for ($i = 0, $j = count($chunks); $i < $j; $i++) {
             $seconds = $chunks[$i][0];
             $name = $chunks[$i][1];
-            if (($count = floor($timediff / $seconds)) != 0) {
+            if (($count = floor($time_diff / $seconds)) != 0) {
                 break;
             }
         }
-        return __("%d {$name}%s ago", $count, ($count > 1 ? 's' : ''));
+        return __("%d $name%s $tense", $count, ($count > 1 ? 's' : ''));
     }
 
     /**