Last active
November 23, 2015 19:47
-
-
Save judbd/dbb958dcf435722ae9ba to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
l'idée première est d'ajouter un tag en kirbytext, pour avoir des dates dynamiques en markdown, | |
par ex pour dire "j'ai 30 ans" et ne pas l'updater tous les ans, mettre j'ai (from:1985) par ex | |
l'explication de comment ajouter des tags est ici, mais ça ça va : http://getkirby.com/docs/advanced/kirbytext | |
*/ | |
kirbytext::$tags['from'] = array( | |
'attr' => array( | |
'to', | |
'format' | |
), | |
'html' => function($tag) { | |
$now = date('Y-m-d'); | |
/*la date de départ qui peut être sous n'importe quelle forme genre 2002 ou 2002-01 ou 2002-05-06 */ | |
$from = $tag->attr('from'); | |
/*la date de fin qui peut être sous n'importe quelle forme genre 2015 ou 2008-01 ou 2012-05-06 */ | |
$to = $tag->attr('to', $now); | |
/*lle format d'affichage mais on verra ça plus tard */ | |
$format = $tag->attr('format', 'y'); | |
/* | |
ACCEPTED FORMATS (pour le moment que Y) | |
http://php.net/manual/en/dateinterval.format.php | |
Y Years, numeric, at least 2 digits with leading 0 01, 03 | |
y Years, numeric 1, 3 | |
M Months, numeric, at least 2 digits with leading 0 01, 03, 12 | |
m Months, numeric 1, 3, 12 | |
D Days, numeric, at least 2 digits with leading 0 01, 03, 31 | |
d Days, numeric 1, 3, 31 | |
a Total number of days as a result of a DateTime::diff() or (unknown) otherwise 4, 18, 8123 | |
H Hours, numeric, at least 2 digits with leading 0 01, 03, 23 | |
h Hours, numeric 1, 3, 23 | |
I Minutes, numeric, at least 2 digits with leading 0 01, 03, 59 | |
i Minutes, numeric 1, 3, 59 | |
S Seconds, numeric, at least 2 digits with leading 0 01, 03, 57 | |
s Seconds, numeric 1, 3, 57 | |
R Sign "-" when negative, "+" when positive -, + | |
r Sign "-" when negative, empty when positive -, | |
*/ | |
/*avant ça il faudrait une astuce pour compléter les dates incomplètes */ | |
$from = new DateTime($from); | |
$to = new DateTime($to); | |
/*et là ça ne marche bien que si la date est complète genre 2012-01-01 */ | |
$interval = $from->diff($to); | |
/*en vrai les formats ne marchent pas vraiment comme ça à part "a" et "Y" mais je verrai ça plus tard*/ | |
return $interval->format('%'.$format); | |
} | |
); |
@judbd comme je l'explique en commentaire dans le bout de code il faudrait faire plein de tests pour gérer plus de chose. Ici j'ai juste donné une solution au problème avec les année simple et strtotime()/DateTime(). :) Gérer les dates ça demande du boulot. Mais heureusement y'a de bonne librairie comme Carbon.
Après tu as donné le lien d'un plugin pour kirby sur twitter, si ça répond à tes besoins c'est cool. Sinon regarde du côté de Carbon.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Merci @rgsone j'ai l'impression que ça fonctionne, dommage que du coup ça tue les formats de style 02/1985 mais c'est pas grave, je vais essayer d'ajouter des tests pour que l'ajout des dates gère les différents formats et ajouter les 01 aux bons endroits.