Un filtre pour #DATE : la date hégirienne

Maintenant que SPIP est devenu multilingue, les sites qu’il va gérer refléteront les différentes cultures rattachées aux langues qu’il supporte et en particulier la culture arabe et islamique.
Il serait, donc, intéressant d’introduire un filtre de conversion des dates grégoriennes en date hégirienne pour les sites qui voudrait utiliser ces dates.

La fonction hijri ci-dessous transforme la date du format MySQL en tampon horaire Unix (j’aurai voulu employer la fonction MySQL UNIX_TIMESTAMP() mais je n’ai pas su comment l’intégrer ici), puis convertit le tampon en date de l’Hégire.

On peut l’utiliser de la façon suivante :
[(#DATE|hijri{arabic})]
ou
[(#DATE|hijri{latin})].

Les noms des mois sont en arabe UTF8 mais ils pourraient être remplacés par l’arabe ISO ou Windows ou encore par la translittération latine.
Notons, enfin, que la journée dans le calendrier de l’Hégire commence à la tombée de la nuit et non a l’aube donc la date change (si je n’ai pas fait d’erreurs) le soir et non le matin.

function hijri($mytime, $set='arabic') {
	$myyear = substr($mytime,0,4);
	$mymonth = substr($mytime,5,2);
	$myday = substr($mytime,8,2);
	$myhour = substr($mytime,11,2);
	$mymin = substr($mytime,14,2);
	$mysec = substr($mytime,17,2);
	$times = mktime($myhour, $mymin, $mysec, $mymonth, $myday, $myyear);
	$TDays=round($times/(60*60*24));
	$HYear=round($TDays/354.37419);
	$Remain=$TDays-($HYear*354.37419);
	$HMonths=round($Remain/29.531182);
	$HDays=$Remain-($HMonths*29.531182);
	$HYear=$HYear+1389;
	$HMonths=$HMonths+10;
	$HDays=$HDays+23;
	if ($HDays>29.531188 and round($HDays)!=30){
		$HMonths=$HMonths+1;
		$HDays=floor($HDays-29.531182);
	}else{
		$HDays=floor($HDays);
	}
	if ($HMonths>12){
		$HMonths=$HMonths-12;
		$HYear=$HYear+1;
	}
	$HMonths_table['arabic'] = Array('',
        'محرم',
        'صفر',
        'ربيع الأول',
        'ربيع الثاني',
        'جمادى الأولى',
        'جمادى الآخرة',
        'رجب',
        'شعبان',
        'رمضان',
        'شوال',
        'ذو القعدة',
        'ذو الحجة');

        $HMonths_table['latin'] = Array('',
        'Muharram',
        'Safar',
        'Rabi\' al-awwal',
        'Rabi\' al-thani',
        'Jumada al-oula',
        'Jumada al-akhira',
        'Rajab',
        'Sha\'ban',
        'Ramadan',
        'Shawwal',
        'Dhu al-Qi\'dah',
        'Dhu al-Hijjah');

        $HMonths_L = $HMonths_table[$set][$HMonths];
	$hijri_date = $HDays." ".$HMonths_L." ".$HYear;
	return $hijri_date;
}

Dernière modification de cette page le 21 janvier 2007

Discussion

6 discussions

  • 1

    Re-bonjour George,
    En fait mes questions sont :
    1)- si on peut forcer la date c’est à dire l’avancer car actuellement sur le calendrier Hégirien nous sommes le 8 Muharram, tous les smartphones sont restés à la date du 7. Le mois s’est terminé plus tôt que prévu.
    2)- Comment faire pour modifier le script et mettre le changement de la date à l’AUBE plutôt que le SOIR (Maghrb) comme le fait bien le script.Tous les sites affichent la date le matin et je suis en décalage
    comme me l’a fait remarqué mes amis.
    Merci pour tout il est génial le script.
    Bien cordialement
    Habib

    • Essayer d’utiliser la fonction ceil() au lieu de floor pour le calcul du jour. Je l’ai essaye mais c’est le soir, il faut attendre le matin.

    Répondre à ce message

  • bjr Georges pouvez vous répondre encore pour ce script merci ?

    Répondre à ce message

  • 7

    Bonjour,
    Merci pour tous ce travail. Je suis débutant et j’ai besoin de votre aide.
    Est ce que vous pouvez me donner plus de détail pour afficher les dates en Hégir (dans la partie en arabe) dans mon site bilingue (Fr Ar). par exemple où intervenir ? j’ai spip 1.9.2c. Merci

    • Dans les squelettes par defaut de SPIP les dates sont introduites en general cpmme ca :
      [(#DATE|nom_jour) ][(#DATE|affdate)]

      Des les squelettes personalises il suffit de remplacer le deuxieme element entre crochets par [(#DATE|hijri{arabic})] , « arabic » pour que la date apparaisse en arabe.

      Ne pas oublier bien sur de copier le code PHP dans l’article et de le coller dans le fichier mes_fonctions.php qu’on aura cree dans le repertoire squelettes, s’il n’existe pas deja.

    • Bonjour,

      Merci, pour votre aide. J’ai appliqué vos instructions, la date est maintenant affichée en hégire. Mais premièrement les caractères du nom du mois sont affichés en point d’interrogation (????) et deuxièmement la date est changé aussi sur les articles rédigés en français. Est-ce qu’il y a un moyen pour changer la date que pour les pages rédigés en arabe ? que faire pour l’affichage des caractères (????) ?

    • les points d’interrrogations veutlent dire que le navigateurs ne reconnait pas le charset (jeu de caracteres) des mois. Dans l’article, le charset est UTF8. Maintenant il s’agit de voir quel est le jeu de characteres de votre site : si c’est UTF8 alors il faut copier le code de l’article dans un editeur de texte comme le bloc note puis de sauvegarder le fichier en chisissant UTF8 comme codage puis de l’integrer dans le site. Si lcharset du site est autre chose que UTF8 alors il faut convertir le code si dessus dans le jeu de caracteres du site.

      Quant a la date sur les articles francais, il faut ici mettre une condition sur la langue de l’article : si la langue est « ar » alors il faut utiliser le filtre « arabic » sinon il faut utiliser le filtre « latin ». Pour la condition sur la langue, la variable est #LANG. Vous pouvez voir sur spip.net comment faire une condition (l’utilisation de «  ? »).

      George

    • Bonjour,
      Ca fait un moment que j’essaye mais je n’arrive pas à me débarrsser de ces points d’interrogation. et mon charset est bien utf-8 !!!

    • Je ne sais pas comment vous faites pour recuperer le code mais si ca ne marche pas, le plus simple serait de convertir les chaines arabes en entites HTML (ا par exemple) puis de les remettre dans le code. Il y a un covertisseur en ligne a l’adresse : http://konieczny.be/unicode.html.

    • Bonjour,

      Ca marche merci. Et je me permet de vous présenter mon site

    • Puisque votre site est base sur SPIP, pourquoi ne pas l’ajouter a la liste a l’adresse :

      http://www.spip.net/ar_article2079.html#signatures

    Répondre à ce message

  • 1

    As salamou aleikoum !
    Est-il possible d’utiliser le [(#DATE|hijriarabic)] dans une page HTML ? je ne ma^trise pas le php et j’aimerais pourtant afficher la date hégirienne sur mon site.

    • La syntaxe du filtre [(#DATE|hijriarabic)] est propre a SPIP, donc pour utiliser ce filtre il faut que le site soit base sur SPIP. Sinon, on peut creer une fonction PHP ordinaire et l’appeler comme d’habitude. Si la page est une page HTML, on peut ecrire cette fonction en javascript et l’integrer a la page ou dans un fichier .js separe.

    Répondre à ce message

  • 1

    Bonjour,

    J’ai demandé à la plupart des Arabes de ma connaissance (y compris des Marocains musulmans qui font le ramadan et vont à la prière le vendredi) en quelle année on était, et ils m’ont tous répondu : « On est en 2004, pourquoi ? ».

    Aucun n’a su me dire exactement en quelle année de l’Hégire nous étions. Ils n’utilisent pas ce calendrier.

    A mon avis, c’est un script qui sera sans doute utile pour un site spécifiquement musulman, mais pour un site de langue arabe non religieux, c’est la date du calendrier grégorien qui sera utilisée.

    Moralité : si vous traduisez votre site en arabe, gardez la date habituelle si vous ne voulez pas dérouter vos visiteurs.

    Bon dimanche à tous.

    Bien amicalement,

    Laurent

    • C’est vrai qu’on utilise habituellement le calendrier gregorien dans le monde arabe. Mais c’est vrai aussi qu’un certain nombre de publications arabes ajoute la date hegirienne a cote de la date gregorienne dans leurs editions imprimees et electronique (par exemple, Al Ahram et Asharq Al Awsat).
      Le but n’est pas de remplacer la date gregorienne mais d’ajouter la date hegirienne pour ceux qui veulent.

    Répondre à ce message

  • 3

    Oui la date change au coucher du soleil (appelé maghrib) et dont l’heure change durant l’année. C’est un très bon script et j’aimerais l’utiliser mais... ben je suis un peu nul. Où dois je copier ça ? Où dois je inscrire : [(#DATE|hijriarabic)] ?

    merci

    • Là ou tu veux que la date s’affiche

    • Bonjour,

      Comment doit je placer la fonction « [(#DATE|hijriarabic)] »
      de quel façon ? on fonction incude php ?
      ET ou doit également placerle script « fonction hijri... » ?

      Merci d’avance !!!

    • La fonction « hijri » doit etre placee dans le fichiers mes_fonctions.php3 (si ce fichier n’existe pas, il faut le creer).
      Puis, la ou on veut que la date hegirienne apparaisse dans le squelette, Il suffit de mettre [(#DATE|hijri{arabic})] si on veut que les mois apparaissent en arabe, ou [(#DATE|hijri{latin})] si on les veut en latin.

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom