我应该将函数的结果存储到数组中吗?

时间:2016-08-08 21:47:50

标签: php performance function

我有这样的功能:

function time_elapsed_string($ptime)
{
            $date_time = strtotime("1348-10-10 04:30:01") + $ptime;
            $year = date("Y",$date_time);
            $month = date("m",$date_time);
            $day = date("d",$date_time);
            $time = date("H:i:s",$date_time);

    $etime = time() - $ptime + 1;

    $a = array( 31536000  =>  'year',
                 2592000  =>  'month',
                   86400  =>  'day',
                    3600  =>  'hour',
                      60  =>  'minute',
                       1  =>  'second'
                );

    foreach ($a as $secs => $str)
    {
        $d = $etime / $secs;
        if ($d >= 1)
        {
            $r = round($d);
                                                                   // EX:
            return array('date' => $day.'-'.$month.'-'.$year,      // 2016-02-20
                         'time' => $time,                          // 03:30:04
                         'difference' => $r . ' ' . $str . ' ago'  // 2 month ago
                        );
        }
    }
}

我这样使用它:

$ptime = 1470692661;
$html = '<span title="date: '.time_elapsed_string($ptime)['date'].' time: '.time_elapsed_string($ptime)['time'].'">in '.time_elapsed_string($ptime)['difference'].'<span>';

如您所见,我正在使用该功能的结果如下:

time_elapsed_string($ptime)['date']
ime_elapsed_string($ptime)['time']
time_elapsed_string($ptime)['difference']

事实上,每次我需要其中一个结果时,我都会调用该函数。是对的吗?或者我应该调用一次并将其存储到数组中?

注意:我的代码也适用。

2 个答案:

答案 0 :(得分:5)

从某个日期/时间开始计算的时间是 mauvais ton

从PHP 5.2.0开始,

DateTime已经可用,并且很多人都低估了它。为什么不使用此代替loopif s?

$create_time = "2016-08-02 12:35:04";
$current_time="2016-08-02 16:16:02";

$dtCurrent = DateTime::createFromFormat('Y-m-d H:i:s', $current_time);
// to use current timestamp, use the following:
//$dtCurrent = new DateTime();
$dtCreate = DateTime::createFromFormat('Y-m-d H:i:s', $create_time);
$diff = $dtCurrent->diff($dtCreate);

现在,您可以根据需要format结果:

$interval = $diff->format("%h hours %i minutes %s seconds");

这将提供一个干净的3 hours 40 minutes 58 seconds,没有任何数组,这是更好的。

<强>更新

通过正则表达式获得小时/分钟/秒的一般解决方案:

$interval = $diff->format("%y years %m months %d days %h hours %i minutes %s seconds");

// now remove zero values
$interval = preg_replace('/(^0| 0) (years|months|days|hours|minutes|seconds)/', '', $interval);

更新2

截至评论:

  

看,我想用你的方法..但我真的无法实现它..其实我需要三件事:timedatedifference ..!但你的做法并没有给我他们......

好吧,我们已经知道如何获得差异,这是上面描述的$interval变量。

要获取时间和日期,您可以再次使用格式从$dtCreate变量中获取:

$time = $dtCreate->format('H:i:s');
$date = $dtCreate->format('d-m-Y');

答案 1 :(得分:4)

这是一个没脑子的人。

- 将@Id @Column(name = "MY_ID") @GeneratedValue(strategy=GenerationType.IDENTITY) private Integer myId; // more variables, getters/setters 的函数调用结果存储在数组中,然后使用它来访问结果。否则你会浪费CPU周期!

time_elapsed_string($ptime)