2011-02-07 71 views
1

我有一块PHP试图做到这一点: 1)给定一个字符串,如“hms”(其中h = hr,m = min,s = sec) 2)将时间从1)到时间() 3)格式化结果看起来像“y-mth-dh-min -s”PHP中的日期问题

所以说时间现在01-01-2011 1am,我想要它添加“ 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米的” 字符串,例如。 “10 0 0”。

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

+0

它能使你的成绩有什么区别,如果你用冒号替换空格? `str_replace('',':',$ values_arr ['regx_expdate'])` – enobrev 2011-02-07 00:33:00

回答

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; 
} 
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); 
0

解析您的输入字符串转换成小时分钟和秒后,它可能是值得重新组织价值观的所述阵列成一个字符串,PHP的strtotime可以处理。

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 

祝你好运!

+0

你知道你可以使用`strtotime(sprintf('+%d days',$ number_of_days))`;-) – Phil 2011-02-07 01:09:54

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());