Skip to content

Instantly share code, notes, and snippets.

@judbd
Last active November 23, 2015 19:47
Show Gist options
  • Save judbd/dbb958dcf435722ae9ba to your computer and use it in GitHub Desktop.
Save judbd/dbb958dcf435722ae9ba to your computer and use it in GitHub Desktop.
<?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);
}
);
@rgsone
Copy link

rgsone commented Nov 23, 2015

@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