|
|
|
|
Bonjour à tous,
Je voudrais savoir si quelqu'un peut m'aider à calculer le temps écoulé entre 2 dates, par exemple une date $date et le jour présent.
Je sais qu'il faut faire un timestamp pour les 2 dates après les convertir en secondes, les soustraires et les reconvertir en mois et années mais j'y arrive pas... quelqu'un peut me donner un exemple concrêt svp ? Merci !
Salut,
$a=mktime(0, 0, 0, 12, 55, 2005);
echo date("Y",$a);
Ca affichera l'année... |
Ca c'est du niveau école primaire
|
Ok ben j'ai essayé avec cette méthode mais bon elle marche pas est-ce que vous pouvez me dire où est l'erreur ?
<?
$date = '06/06/1994';
function date2timestamp($date)
{
list($day, $month, $year) = sscanf($date,"%d/%d/%d");
return mktime(0, 0, 0, $day, $month, $year);
}
echo date2timestamp($date);
function elapsed($day, $month, $year) {
$todayMonth = date(n);
$todayDay = date(j);
$todayHour = date(G);
$todayMinute = date(i);
$monthday = date(nj);
$link = $month.$day;
$datepoint = $link;
if ($monthday < $datepoint) $years = date(Y) - $year - 1;
else $years = date(Y) - $year;
if ($years < 1) $yearWord = '';
elseif ($years == 1) $yearWord = 'year,';
elseif ($years > 1) $yearWord = 'years,';
if ($todayMonth > $month) {
if ($todayDay < $day) $months = $todayMonth - $month -1;
else $months = $todayMonth - $month;
} else {
$between = $month - $todayMonth;
$plus = 12 - $month;
if ($todayDay < $day) $months = $month + $plus - $between -1;
else $months = $month + $plus - $between;
}
if ($months == 1) $monthWord = 'month,';
elseif ($months > 1) $monthWord = 'months,';
if ($todayDay > $day) {
if ($todayHour < $hour) $days = $todayDay - $day -1;
else $days = $todayDay - $day;
} else {
$between = $day - $todayDay;
$daysToEndOfMonth = date(t) - $day;
if (date(t) == 28) $plus = $daysToEndOfMonth;
if (date(t) == 29) $plus = $daysToEndOfMonth;
if (date(t) == 30) $plus = $daysToEndOfMonth;
if (date(t) == 31) $plus = $daysToEndOfMonth;
if ($todayHour < $hour) $days = $day + $plus - $between - 1;
else $days = $day + $plus - $between;
}
if ($days == 1) $dayWord = 'day';
else $dayWord = 'days';
if ($todayHour > $hour) {
if ($todayMinute < $minute) $hours = $todayHour - $hour - 1;
else $hours = $todayHour - $hour;
} else {
$between = $hour - $todayHour;
$plus = 24 - $hour;
if ($todayMinute < $minute) $hours = $hour + $plus - $between - 1;
else $hours = $hour + $plus - $between;
}
if ($hours == 1) $hourWord = 'hour,';
if ($hours > 1) $hourWord = 'hours,';
if ($todayMinute > $minute) {
$minutes = $todayMinute - $minute;
} else {
$between = $minute - $todayMinute;
$plus = 60 - $minute;
$minutes = $minute + $plus - $between;
}
if ($minutes == 60) $minutes = 0;
if ($minutes == 1) $minuteWord = 'minute';
elseif ($minutes > 1) $minuteWord = 'minutes';
if ($years == 0) { $years = ''; $yearWord = ''; }
if ($months == 0) { $months = ''; $monthWord = ''; }
if ($days == 0) { $days = ''; $dayWord = ''; }
if ($hours == 0) { $hours = ''; $hourWord = ''; }
if ($minutes == 0) { $minutes = ''; $minuteWord = ''; }
echo $years.' '.$yearWord.' '.$months.' '.$monthWord.' '.$days.' '.$dayWord.'';
}
date2timestamp($date);
elapsed($day, $month, $year);
?>
|
ATTENTION, la fonction mktime à un ordre de paramètre bien précis :
int mktime ( [int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst]]]]]]] ) donc au lieu de faire: return mktime(0, 0, 0, $day, $month, $year); tu dois faire : return mktime(0, 0, 0, $month, $day, $year); ensuite (en fait, avant) tu fait : list($day, $month, $year) = sscanf($date,"%d/%d/%d"); mais les varaibles $day, $month, $year ne font pas défini. Donc elle sont uilisé seulement dans la fonction. Hors, tu veut les uilisé plus tard en faisant : elapsed($day, $month, $year); dans un contexte global, donc ces variables n'ont pas de valeur. |
Le sujet correspond un peu à ma problématique. Les réponses données ne correspondent à pas grand chose...
|
Après quelques jours de recherche, il suffisait de demander pour que la réponse puisse être trouvée...
|
Franchement je crois qu'il vaut mieux passer un peu de temps sur la doc PHP plutôt que se taper des lignes de code comme ça !
|