par
jonjojo007 » 06 mars 2017, 17:10
Effectivement, 1h30 ça va pas. Il faut marquer 1 hour 30 minutes.
J'ai fait une fonction pour gérer les cas comme ça pour strtotime
Code : Tout sélectionner
function formatTimeStr($s) {
if(preg_match('#([0-9]{1,2})\s*min#',$s,$res)) {
return $res[1].' minutes';
} elseif(preg_match('#([0-9]{1})\s*h(\s*[0-9]{1,2})?#',$s,$res)) {
return $res[1].' hour'.(!empty($s[2])?' '.$s[2].' minutes':'');
} elseif(preg_match('#([0-9]) (nuit|jour)#i',$s,$res)) {
return intval($res[1]*12). ' hours';
} elseif(preg_match('#une nuit#i',$s) || preg_match('#un jour#i',$s,$res)) {
return '12 hours';
} elseif(preg_match('#aucun#i',$s,$res)) {
return '0 minute';
} else {
return 0;
}
}
Et du coup j'ai réussis à faire fonctionner une fonction trouvée sur le net comme çà de cette mannière :
Code : Tout sélectionner
function time_to_iso8601_duration($time) {
$units = array(
"Y" => 365*24*3600,
"D" => 24*3600,
"H" => 3600,
"M" => 60,
"S" => 1,
);
$str = "P";
$istime = false;
foreach ($units as $unitName => &$unit) {
$quot = intval($time / $unit);
$time -= $quot * $unit;
$unit = $quot;
if ($unit > 0) {
if (!$istime && in_array($unitName, array("H", "M", "S"))) { // There may be a better way to do this
$str .= "T";
$istime = true;
}
$str .= strval($unit) . $unitName;
}
}
return $str;
}
Effectivement, 1h30 ça va pas. Il faut marquer 1 hour 30 minutes.
J'ai fait une fonction pour gérer les cas comme ça pour strtotime
[code]function formatTimeStr($s) {
if(preg_match('#([0-9]{1,2})\s*min#',$s,$res)) {
return $res[1].' minutes';
} elseif(preg_match('#([0-9]{1})\s*h(\s*[0-9]{1,2})?#',$s,$res)) {
return $res[1].' hour'.(!empty($s[2])?' '.$s[2].' minutes':'');
} elseif(preg_match('#([0-9]) (nuit|jour)#i',$s,$res)) {
return intval($res[1]*12). ' hours';
} elseif(preg_match('#une nuit#i',$s) || preg_match('#un jour#i',$s,$res)) {
return '12 hours';
} elseif(preg_match('#aucun#i',$s,$res)) {
return '0 minute';
} else {
return 0;
}
}[/code]
Et du coup j'ai réussis à faire fonctionner une fonction trouvée sur le net comme çà de cette mannière :
[code]time_to_iso8601_duration(strtotime(formatTimeStr($duree),0))[/code]
[code]function time_to_iso8601_duration($time) {
$units = array(
"Y" => 365*24*3600,
"D" => 24*3600,
"H" => 3600,
"M" => 60,
"S" => 1,
);
$str = "P";
$istime = false;
foreach ($units as $unitName => &$unit) {
$quot = intval($time / $unit);
$time -= $quot * $unit;
$unit = $quot;
if ($unit > 0) {
if (!$istime && in_array($unitName, array("H", "M", "S"))) { // There may be a better way to do this
$str .= "T";
$istime = true;
}
$str .= strval($unit) . $unitName;
}
}
return $str;
}[/code]