french relative time

This commit is contained in:
2019-01-27 23:10:17 +01:00
parent ddf37dad09
commit 3a1bc9982e

View File

@@ -1,7 +1,7 @@
<?php
/**
* ToolBox - Only static functions missing from php librairy
* ToolBox - Only static functions missing from php library
* @author franzz
* @version 1.1
*/
@@ -341,19 +341,37 @@ class ToolBox
return $sText;
}
public static function getDateTimeDesc($oTime)
/**
* Return relative time description
* FIXME shitty implementation of i18n
* @param int $oTime Time (strtotime)
* @param string $sLang Language (en/fr)
* @return string Relative Time
*/
public static function getDateTimeDesc($oTime, $sLang='en')
{
$iTimeStamp = is_numeric($oTime)?$oTime:strtotime($oTime);
$sCurTimeStamp = time();
switch ($sLang) {
case 'en':
$asWeekDays = array('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'satursday', 'sunday');
$asMonths = array('january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december');
break;
case 'fr':
$asWeekDays = array('lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');
$asMonths = array('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre');
break;
}
$sSep = '|';
$sFormat = 'Y'.$sSep.'n'.$sSep.'W'.$sSep.'N'.$sSep.'j'.$sSep.'G';
list($sYear, $sMonth, $sWeek, $sWeekDay, $sDay, $sHour) = explode($sSep, date($sFormat, $iTimeStamp));
list($sCurYear, $sCurMonth, $sCurWeek, $sCurWeekDay, $sCurDay, $sCurHour) = explode($sSep, date($sFormat, $sCurTimeStamp));
$sDesc = '';
switch ($sLang) {
case 'en':
if($iTimeStamp>$sCurTimeStamp) $sDesc = 'in the future';
elseif($sCurTimeStamp-$iTimeStamp<60) $sDesc = 'a few seconds ago';
elseif($sCurTimeStamp-$iTimeStamp<60*10) $sDesc = 'a few minutes ago';
@@ -374,6 +392,30 @@ class ToolBox
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*365) $sDesc = 'in '.$asMonths[$sMonth-1].' '.$sYear;
elseif($sYear==($sCurYear-1)) $sDesc = 'last year';
else $sDesc = 'in '.$sYear;
break;
case 'fr':
if($iTimeStamp>$sCurTimeStamp) $sDesc = 'dans le futur';
elseif($sCurTimeStamp-$iTimeStamp<60) $sDesc = 'il y a quelques secondes';
elseif($sCurTimeStamp-$iTimeStamp<60*10) $sDesc = 'il y a quelques minutes';
elseif($sCurTimeStamp-$iTimeStamp<60*20) $sDesc = '15 minutes';
elseif($sCurTimeStamp-$iTimeStamp<60*50) $sDesc = '30 minutes';
elseif($sCurTimeStamp-$iTimeStamp<60*60*2) $sDesc = '1h';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24 && $sDay==$sCurDay) $sDesc = 'à '.$sHour.'h';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24) $sDesc = 'hier';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*7 && $sWeek==$sCurWeek) $sDesc = $asWeekDays[$sWeekDay-1];
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*7) $sDesc = $asWeekDays[$sWeekDay-1].' dernier';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*9) $sDesc = 'il y a une semaine';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*12) $sDesc = '10 jours';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*16) $sDesc = '2 semaines';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*23) $sDesc = '3 semaines';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*31 && $sMonth==$sCurMonth) $sDesc = 'le '.$sDay.' '.$asMonths[$sMonth-1];
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*30*2 && $sMonth==($sCurMonth-1)) $sDesc = 'le mois dernier';
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*365 && $sYear==$sCurYear) $sDesc = 'en '.$asMonths[$sMonth-1];
elseif($sCurTimeStamp-$iTimeStamp<60*60*24*365) $sDesc = 'en '.$asMonths[$sMonth-1].' '.$sYear;
elseif($sYear==($sCurYear-1)) $sDesc = 'l\'année dernière';
else $sDesc = 'en '.$sYear;
break;
}
//return self::mb_ucfirst($sDesc);
return $sDesc;