Har en funktion som visar hur länge sen det var ett datum var som visas i olika format. Ex: 4 sek sedan, 1 min och 4 sek sen och uppåt.
Har nu problem att den räknar konstigt med sekunderna. Den räknar från 1 upp till 15 och sen visas sekunderna från -45 och räknar neråt. På mitt webbhotell räknar den ända upp till 45 och börjar sen räkna -15 och ner till 0.
Någon som kan kolla varför detta görs. Sätt datumet så det skiljer ca 5 minuter från datumet som är just nu.
<?php
$date = "2008-12-21 04:03:44";
echo Datum($date);
function Datum($data_ref){
// Get the current date
$current_date = date('Y-m-d H:i:s');
// Extract from $current_date
$current_year = substr($current_date,0,4);
$current_month = substr($current_date,5,2);
$current_day = substr($current_date,8,2);
// Extract from $data_ref
$ref_year = substr($data_ref,0,4);
$ref_month = substr($data_ref,5,2);
$ref_day = substr($data_ref,8,2);
// create a string yyyymmdd 20071021 and yyyy-mm-dd
$tempMaxDate = $current_year . $current_month . $current_day;
$tempDataRef = $ref_year . $ref_month . $ref_day;
$tempDifference = $tempMaxDate-$tempDataRef;
$tempMaxDate2 = $current_year .'-'. $current_month .'-'. $current_day;
$tempDataRef2 = $ref_year .'-'. $ref_month .'-'. $ref_day;
// Extract $current_date H:m:ss
$current_hour = substr($current_date,11,2);
$current_min = substr($current_date,14,2);
$current_seconds = substr($current_date,17,2);
// Extract $data_ref Date H:m:ss
$ref_hour = substr($data_ref,11,2);
$ref_min = substr($data_ref,14,2);
$ref_seconds = substr($data_ref,17,2);
$ref_tid = substr($data_ref,11,5);
$hDf = $current_hour-$ref_hour;
$mDf = $current_min-$ref_min;
$sDf = $current_seconds-$ref_seconds;
// If the difference is GT 15 days show the date
if($tempDifference >= 15){
echo $tempDataRef2 .' (' . $ref_tid . ')';
} else {
// Show time difference ex: 2 min 54 sec ago.
$dDf=$tempDifference;
if($dDf<1){
if($hDf>0){
if($mDf<0){
$mDf = 60 + $mDf;
$hDf = $hDf - 1;
echo $mDf . ' min sedan';
} else {
echo $hDf. ' h ' . $mDf . ' min sedan';
}
} else {
if($mDf>0){
echo $mDf . ' min ' . $sDf . ' sek sedan';
} else {
echo $sDf . ' sek sedan';
}
}
} else {
if($dDf == 1){
echo ' Igår (' . $ref_tid . ')';
}else{
echo $dDf . ' dagar sen (' . $ref_tid . ')';
}
}
}
}
?>
Bra kod.. Men hur gör jag som i min kod att den kollar de olika värdena och skriver ut det jag vill.. Nu skriver den ut så himla mycket i ditt exempel..
sen kan du köra:
var_dump($durations);
...i funktionen format så ser du alla värden. Det är sen upp till dig att använda dem, det här var bara ett exempel :)
Kommenterar du aldrig dina funktioner? Kan vara skönt om man inte använt en funktion på länge. Exempel, jag gissar vad den gör. Orkar inte testa, du förstår nog mitt tips ändå. :bire
pulse skrev:
// ---------- duration(argument) ------------------
// duration() takes an argument with seconds and converts it to time given in an array. The keys are: years, month, weeks, days, hours, minutes and seconds.
// ------------ example of usage ------------------
// $sec = 1200;
// $time_array = duration($sec);
function durations($seconds)
{
$periods = array(
'years' => 31556926,
'months' => 2629743,
'weeks' => 604800,
'days' => 86400,
'hours' => 3600,
'minutes' => 60,
'seconds' => 1
);
$durations = array();
foreach ($periods as $period => $seconds_in_period)
{
if ($seconds >= $seconds_in_period)
{
$durations[$period] = floor($seconds / $seconds_in_period);
$seconds -= $durations[$period] * $seconds_in_period;
}
}
return $durations;
}
$hDf = $current_hour-$ref_hour;
$mDf = $current_min-$ref_min;
$sDf = $current_seconds-$ref_seconds;
if($tempDifference >= 15){ // Om postade datumet är mer än 15 dagar sen
// Visar datumet som YYY-MM-DD (HH:MM)
echo $tempDataRef2 .' (' . $ref_tid . ')';
} else {
// Show time difference ex: 2 min 54 sec ago.
$dDf=$tempDifference;
if($dDf<1){
if($hDf>0){
if($mDf<0){
$mDf = 60 + $mDf;
$hDf = $hDf - 1;
// Visar som X min sedan
echo $mDf . ' min sedan';
} else {
// Visar som X h Y min sedan
echo $hDf. ' h ' . $mDf . ' min sedan';
}
} else {
if($mDf>0){
// Visar som X min Y sek sedan
echo $mDf . ' min ' . $sDf . ' sek sedan';
} else {
// Visar som X sek sedan
echo $sDf . ' sek sedan';
}
}
} else {
if($dDf == 1){
// Visar som Igår (HH:MM)
echo ' Igår (' . $ref_tid . ')';
}else{
// Visar som X dagar sen (HH:MM)
echo $dDf . ' dagar sen (' . $ref_tid . ')';
}
}
}