2012-11-18 2 views
0

fonction standard: (Voir codepad)Obsolète: mktime(): Le paramètre is_dst est obsolète

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

?> 

fonction modifiée : (Voir codepad)

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

?> 

la première La fonction fonctionne sans erreurs ni avis.

la fonction modifiée donne le message:

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 

je ne sais pas pourquoi je reçois le message uniquement à la fonction modifiée? qu'est-ce qui ne va pas ici?

+0

Vous êtes en utilisant un argument de trop sur la fonction 'mktime()' –

Répondre

2

utilisation strtotime

comme

$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); 
+1

+1 Bien mieux pour réaliser ce que la question essaie de faire :-) –

2

Vous utilisez un trop d'arguments sur la fonction mktime(). Retirez l'un des zéros, comme ceci:

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

C'est la cause de votre problème, mais comme @NullPointer l'a souligné dans sa réponse, il y a une manière beaucoup plus efficace et mieux pour y parvenir. Utilisez sa solution!

3

Si vous souhaitez utiliser un moyen plus simple de le faire essayer d'utiliser DateTime::diff

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

Ici, il est en fonction qui peut le rendre plus facile pour vous d'utiliser:

<?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'); 
?> 
+2

+1 Une autre bonne réponse, mais peut-être trop avancée pour @bernte car elle utilise des objets :-) –

+0

salut john .. J'ai essayé votre petit code :) mais je ne reçois pas le résultat que je veux .. je reçois la différence au format + 1h .. et -1h .. mais j'ai besoin de l'heure absolue – bernte

+0

pour echo diff ('18: 00: 01 ', '17: 00: 01'); Je reçois 01:00:00 mais j'ai besoin de 23:00:00. est-ce possible? – bernte

Questions connexes