Valider 0c3b5755 rédigé par marcimat's avatar marcimat
Parcourir les fichiers

La fonction DATE_FORMAT() en mysql dispose de différents formats tel que %Y %m...

La fonction DATE_FORMAT() en mysql dispose de différents formats tel que %Y %m %d pour formatter une date.
En SQLite, on mappe cette fonction absente nativement sur strftime() de PHP.
Cependant, certains paramètres ne correspondent pas entre les deux !
On propose de convertir à la volée les paramètres qui ont un équivalent sous un autre nom,
Et de logguer si on trouve des paramètres dont on sait qu'ils n'existent pas ou retournent une valeur totalement différente à celle attendue.
parent e3d7c4bb
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+21 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -120,7 +120,6 @@ function _sqlite_init_functions(&$sqlite) {
		'YEAR' => array('_sqlite_func_year', 1)
	);


	foreach ($fonctions as $f => $r) {
		_sqlite_add_function($sqlite, $f, $r);
	}
@@ -315,8 +314,29 @@ function _sqlite_func_regexp_match($cherche, $quoi) {
	return $return;
}


// https://code.spip.net/@_sqlite_func_strftime
function _sqlite_func_strftime($date, $conv) {
	// ok : %a %b %d %e %H %I %l %j %k %m %p %r %S %T %w %y %Y
	// on ne sait pas en gérer certains...
	static $errors = [];
	static $mysql_to_php_not_ok = ['%c', '%D', '%f', '%U', '%V', '%W', '%X'];
	static $mysql_to_php = [
		'%h' => '%I',
		'%i' => '%M',
		'%M' => '%B',
		'%s' => '%S',
		'%u' => '%U',
		'%v' => '%V',
		'%x' => '%G',
	];
	$count = 0;
	str_replace($mysql_to_php_not_ok, '', $conv, $count);
	if ($count > 0 && !isset($errors[$conv])) {
		$errors[$conv] = true;
		spip_log("DATE_FORMAT : At least one parameter can't be parsed by strftime with format '$conv'", 'sqlite.' . _LOG_INFO_IMPORTANTE);
	}
	$conv = str_replace(array_keys($mysql_to_php), $mysql_to_php, $conv);
	return strftime($conv, is_int($date) ? $date : strtotime($date));
}