2017-10-26 19 views
0

私は一定の時間量を追加する必要があるシステムを持っています。 私が検索してきたし、これは私が到達したい答えは「2017-あるはるかにそれは最も正確な方法ですが、それでも私がPHPのDateTimeに分数時間を追加する

function calculateHours($hours){ 

    $now = new DateTime("2017-10-25 10:23:00"); 
    $time = array(); 
    $time = explode(".", $hours); 
    $time [1] += $time [0]*60; 

    $now->modify("+".$time[1]." hours"); 

    return $now; 
} 


$diff = 119.23; 
$answer = calculateHours($diff); 
echo $answer ->format('Y-m-d H:i:s'); 

を必要とする答えを与えるものではありません、私が得たものです11月9日11時00" 分00秒と私が受け取る "date_add

date_add($now, date_interval_create_from_date_string($tempo[1]' hours')); 

またはオブジェクトとして2017年10月25日12時22分23秒" の代わりに

+1

です。あなたのコードを実行すると、結果は '2017-10-25 12:22:23'になります。したがって、開始日が間違っているか、追加する時間数が間違っています。また、119を60倍にすると、**分**が計算されますが、**秒**を追加しています(したがって、時間に3600を、分に60を掛けます)。 – Pascal

+0

ちょうどそれを編集したところ、 "2017-11-09"の代わりに "2017-10-25"をつけていて、追加したい時間は正しいと思っていました。 。 – MathewSGon

+0

時間単位は '$ diff = 119.23'ですか? – madalinivascu

答えて

0

用途:

$now->add(DateInterval::createFromDateString($tempo[1].' hours')); 
+0

彼の例はオブジェクトではない手続き型の – Mcsky

+0

@Mcsky更新を参照してください。 – madalinivascu

+0

良い、なぜ私の答えをdownvote? – Mcsky

0

$hours変数からx秒で反転を作成するには、DateInterval php classを使用する必要があります。

次に、あなただけの時間を追加するこの例に

function calculateHours($hours){ 

    $now  = new DateTime("2017-10-25 10:23:00"); 
    var_dump($now); 
    $timeParts = explode(".", $hours); 
    // Where 23 is a percentage of on hour 
    $minutes = $timeParts[0] * 60 + round($time[1] * 60/100); 
    // Where 23 is the number of minutes 
    $minutes = $timeParts[0] * 60 + $time[1]; 

    $interval = new DateInterval(sprintf('PT%dM', $minutes)); 
    $now->add($interval); 
    echo $now->format('Y-m-d H:i:s'); 

    return $now; 
} 
+0

私はダウンボートしませんでしたが、おそらくマニュアルを投稿するためにdownvotedしています。内部の情報は答えを提供するかもしれませんが、それはstackoverflowのための適切な答えではありません。 OPの状況で動作する例を追加してください、あなたは投票が変わるのを見るかもしれません。 – IsThisJavascript

0

を見てみてくださいあなたの日付

を変更するdatetime add intervalメソッドを使用する必要がありますが正しくありません。時間数を60倍にすると分がかかります。

このコードは機能するはずです。

function calculateHours($hours){ 

    $now = new DateTime("2017-10-25 10:23:00"); 
    $time = explode(".", $hours); 
    $time[1] += $time[0]*60; 

    $now->modify("+".$time[1]." minutes"); 

    return $now; 
} 


$diff = 119.23; 
$answer = calculateHours($diff); 
echo $answer->format('Y-m-d H:i:s'); 

結果は、いくつかの物事があなたの質問と間違っているように思え2017-10-30 09:46:00

+0

はい、私はこの結果を得ましたが、私のコードが指定された値にならないことが間違っていると考えています – MathewSGon

+0

'$ now-> modify(" + "。$ time [1]。" hours " ; '' $ now-> modify( "+"。$ time [1]。 "minutes"); ' – Pascal

関連する問題