0

標準機能: (コードパッドを参照)

<?php

$start_time_o = "18:00";
$end_time_o = date("H:i");

function get_time_difference(){

    global $start_time_o, $end_time_o;

    $start_time = explode(":", $start_time_o);
    $end_time = explode(":", $end_time_o);

    $start_time_stamp = mktime($start_time[0], $start_time[1], 0, 0, 0, 0);
    $end_time_stamp = mktime($end_time[0], $end_time[1], 0, 0, 0, 0);

    $time_difference = $end_time_stamp - $start_time_stamp;

    return gmdate("H:i", $time_difference); 
}

echo get_time_difference();

?>

変更された機能: (コードパッドを参照)

<?php

$start_time_o = "18:00:01";
$end_time_o = date("H:i:s");

function get_time_difference(){

    global $start_time_o, $end_time_o;

    $start_time = explode(":", $start_time_o);
    $end_time = explode(":", $end_time_o);

    $start_time_stamp = mktime($start_time[0], $start_time[1], $start_time[2], 0, 0, 0, 0);
    $end_time_stamp = mktime($end_time[0], $end_time[1], $end_time[2], 0, 0, 0, 0);

    $time_difference = $end_time_stamp - $start_time_stamp;

    return gmdate("H:i:s", $time_difference); 
}

echo get_time_difference();

?>

最初の機能は、エラーや通知なしで機能します。

変更された関数は次のメッセージを表示します。

Deprecated: mktime(): The is_dst parameter is deprecated in C:\xampp\htdocs\index.php on line 13
Deprecated: mktime(): The is_dst parameter is deprecated in C:\xampp\htdocs\index.php on line 14

変更された関数でのみメッセージを受信する理由がわかりません。ここで何が問題なのですか?

4

3 に答える 3

3

これを行うためのより簡単な方法を使用したい場合は、使用してみてくださいDateTime::diff

<?php
$datetime1 = new DateTime('18:00:01');
$datetime2 = new DateTime();
$interval = $datetime1->diff($datetime2);
echo $interval->format('H:i:s');
?>

これは、使いやすくする機能として次のとおりです。

<?php
function diff($first_datetime, $second_datetime = "now")
{
    $datetime1 = new DateTime($first_datetime);
    $datetime2 = new DateTime($second_datetime);
    $interval = $datetime1->diff($datetime2);
    return $interval->format('H:i:s');
}

// One of the date/time parameters is now so 
// we only  have to pass one parameter
echo diff('18:00:01');

// Neither parameter is now
echo diff('18:00:01', '20:00:00');
?>
于 2012-11-18T18:37:14.457 に答える
2

使用するstrtotime

お気に入り

$someString = '10/10/2012 4:34 pm';  
date_default_timezone_set('American/New_York');
$timestamp = strtotime($someString);
echo date('Y/m/d H:i:s', $timestamp);
于 2012-11-18T18:32:52.693 に答える
2

関数で使用している引数が多すぎmktime()ます。次のように、ゼロの 1 つを削除します。

$start_time_stamp = mktime($start_time[0], $start_time[1], $start_time[2], 0, 0, 0);
$end_time_stamp = mktime($end_time[0], $end_time[1], $end_time[2], 0, 0, 0);

これが問題の原因ですが、@NullPointer が彼の回答で指摘しているように、これを達成するためのはるかに効率的でより良い方法があります。彼のソリューションを使用してください!

于 2012-11-18T18:33:19.743 に答える