2011-02-07 85 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());