Communauté Eggdrop

Version complète : Calcul de date future
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Ce petit bout de code permet de convertir un délai au format XXyXXwXXdXXhXXmXXs (années, semaines, jours, heures, minutes, secondes) en un unix timestamp (nombre de secondes écoulées depuis le 1er janvier 1970 à 0h0m0s).

tcl
namespace eval dates {
 
   variable treg {^((\d{1,2})y)?((\d{1,})w)?((\d{1,})d)?((\d{1,})h)?((\d{1,})m)?((\d{1,})s)?$}
 
   proc futur {sdate} {
      set more {}
      if {![regexp -nocase -- $::dates::treg $sdate -> Y y W w D d H h M m S s]} {
         putlog "Désolé mais $sdate n'est pas un format reconnu"
         return [clock seconds]
      }
      if {[info exists y] && $y ne ""} { lappend more "$y years" }
      if {[info exists w] && $w ne ""} { lappend more "$w weeks" }
      if {[info exists d] && $d ne ""} { lappend more "$d days" }
      if {[info exists h] && $h ne ""} { lappend more "$h hours" }
      if {[info exists m] && $m ne ""} { lappend more "$m minutes" }
      if {[info exists s] && $s ne ""} { lappend more "$s seconds" }
      return [clock add [clock seconds] {*}[join $more " "]]
   }
}



Code :
.tcl clock format [::dates::futur "abc"]
Désolé mais abc n'est pas un format reconnu
Tcl: Wed Oct 25 15:35:04 CEST 2023
.tcl clock format [::dates::futur "1d3h"]
Tcl: Thu Oct 26 18:35:04 CEST 2023
.tcl clock format [::dates::futur "2y2w2h5s"]
Tcl: Sat Nov 08 17:35:09 CEST 2025
.tcl clock format [::dates::futur "2h2w2m5s"]
Désolé mais 2h2w2m5s n'est pas un format reconnu
Tcl: Wed Oct 25 15:35:04 CEST 2023

L'ordre dans le délai est important, cela permet de garder une cohérence dans les valeurs entrées.
En cas d'erreur (délai invalide), c'est le timestamp courant qui est retourné.