PHP中的日期问题

时间:2011-02-07 00:26:28

标签: php date

我有一块试图这样做的PHP: 1)给出一个像“h m s”这样的字符串(其中h = hr,m = min,s = sec) 2)将时间从1)添加到时间() 3)将结果格式化为“y-mth-d-h-min-s”

所以说时间现在是01-01-2011凌晨1点,我希望它添加“10 0 0”,这应该给我01-01-2011上午11点,但由于某种原因,此刻,它似乎添加字符串,但不准确。

这是我正在使用的代码:

$values_arr['regx_expdate'] = date("Y-m-d H:i:s", time()+$values_arr['regx_expdate']);

其中$ values_arr ['regx_expdate']是格式为“h m s”的字符串,例如。 “10 0 0”。

主要问题是时间()如何知道“10 0 0”实际上是10小时0分0分钟,而不是10天0小时0分钟

5 个答案:

答案 0 :(得分:1)

没有。

它将cast it to int,将其解释为秒,并将其添加到time()的结果中。

可以按照您的描述执行的一些代码是:

list ($h,$m,$s) = explode(' ', $values_arr['regx_expdate'], 3);
$difference = 60*60*$h + 60*$m + $s;
$values_arr['regx_expdate'] = date("Y-m-d H:i:s", time()+$difference);

答案 1 :(得分:0)

我能想到的最简单的方法是从$values_arr['regx_expdate']中提取每个令牌,加上秒并简单地将其添加到time()

例如

if (preg_match('/^(\d{1,2}) (\d{1,2}) (\d{1,2})$/', $values_arr['regx_expdate'], $units)) {
    $seconds = $units[3] + ($units[2] * 60) + ($units[1] * 3600);

    $newTimestamp = time() + $seconds;
}

答案 2 :(得分:0)

将输入字符串解析为Hours Minutes和Seconds后,可能值得将所述值数组重组为PHP strtotime可以处理的字符串。

答案 3 :(得分:0)

这个小功能可能有所帮助,您可以根据自己的目的进行自定义:

function AddingDaysFromNow($number_of_days)
    {
        $today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
         // today is now time return in seconds

        $addingTime = $today + (86400 * $number_of_days);
         // adding to advance it

        //choice a date form at here
        return date("Y-m-d", $addingTime);
    }

    //use it as 
      $expireDate = AddingDaysFromNow(2);  // assume the 2 is advance to 2 days ahead
                                           // return the day in future
祝你好运!

答案 4 :(得分:0)

要在php中处理和转换日期,你应首先强制所有内容进入unixtimestamp,然后你给它你想要的结构

$date = date("THE-DATE-FORMAT-YOU-WANT", "THE-DATE-YOU-WOULD-LIKE-TO-CONVERT-IN-SECONDS");

//For example.

$new_date = date("Y-m-d H:i:s", strtotime($old_date));

$now = date("Y-m-d H:i:s", time());