Šodien mani kaunināja, ka es nesmuki datumus rakstot. Ka “02.06.2005. 07:21:22” patiesībā cilvēkam neko neizsaka. Cita lieta, ja paziņotu vienkārši “vakar” – tas jau daudz labāk izklausoties. Taisnība jau arī ir – cilvēks nav dators, cilvēkam BIOS-ā nav iešūts kalendārs.
Tāpēc funkcija, kas UNIX timestampam atgriež elementāros vārdiskos aprakstus. Tā sacīt, izkrāso pati, ja gribi citādi:
function TextInfo($spTime){
$todayMidNight = mktime(0, 0, 0, date("m"), date("d"), date("y"));
$yesterdayMidNight = $todayMidNight - 24*60*60;
$nowTime = mktime(); //brīdis, pret kuru rēķinās
$now = getdate($nowTime); //aprēķina brīža dati sadalīti pa "detaļām"
//timestamp pagājušās svētdienas beigām
$sundayEveningSpan = ((($now["wday"]+6)%7)*24*60*60);
$then = getdate($spTime); //laiks, pret kuru rēķinās sadalīts pa "detaļām"
//vai sakrīt ar šodienu
if ( ($now["mday"]==$then["mday"]) &&
($now["mon"]==$then["mon"]) &&
($now["year"]==$then["year"])) {
if ($then["hours"] < 6) return "šonakt"; //noticis šajā naktī
if ($then["hours"] < 10) return "šorīt"; //noticis rīta pusē
return "šodien"; //citādi vienkārši informējam, ka šodien
}
//ir noticis vakardien
if ( ($todayMidNight > $spTime) && ($spTime >= $yesterdayMidNight)) {
if ( abs( $now["hours"] - $then["hours"] ) < 3) return "vakar ap šo laiku"; //ja stundas līdzīgas pašreizējām
if ($then["hours"] < 6) return "vakar naktī"; //noticis vakar no rīta agri
if ($then["hours"] < 10) return "vakar no rīta";
if ($then["hours"] < 12) return "vakar priekšpusdienā";
return "vakar";
}
//ir noticis šonedēļ
if (( $todayMidNight > $spTime) && ($todayMidNight- $sundayEveningSpan < $spTime )) {
return "šonedēļ";
}
//ir noticis pagājušajā nedēļā
if (( $todayMidNight- $sundayEveningSpan > $spTime) &&
( $todayMidNight- $sundayEveningSpan - 24*60*60*7 < $spTime )) {
return "pagājušajā nedēļā";
}
//ja senāk par pagājušo nedēļu, vai nav senāk par gadu?
$tSpan = $nowTime - $spTime;
if (floor($tspan /(24*60*60*365) )>0) return " pirms vairāk nekā gada";
//aizmirstam īsos un garos mēnešus
$tSpanMonths = floor( $tSpan / (24*60*60*30) );
if ($tSpanMonths > 0) {
//starp 1 un 2 mēnešiem
if ($tSpanMonths == 1) {
$days = floor(($tSpan-24*60*60*30)/(24*60*60));
if ( ($days!=1) && ($days!=21) && ($days!=31))
return "pirms mēneša un ".$days." dienām";
Else
return "pirms mēneša un ".$days." dienas";
}
return "pirms vairāk nekā ".$tSpanMonths." mēnešiem";
} else {
//jāskatās, vai bija tas pats mēnesis, vai iepriekšējais
if ($then["mon"]==$now["mon"]) return "šajā mēnesī"; else return "pagājušajā mēnesī";
}
}
Parametros Unix timestamps.
Mjā – man gan liekas, kur nu vēl skaistāk un loģiskāk?! Nesmuki… Bet 2005-10-16 22:23:10 loģiskuma ziņā pārsist nevar.
Un man liekas,ka vajadzētu iekļaut pārtulkojamības iepēju…