OVH Cloud OVH Cloud

date

10 réponses
Avatar
Alexandre Jaquet
Bonjour,

J'ai besoin dans mon script de déterminer :

-la date courrante
-la semaine courrante (date_start date_end) à partir de la date d'un jour
-le mois courrant

Afin d'extraire des données

quelqu un aurait t il déjà implémenter ceci ?

D'avance merci

-Alexandre Jaquet

10 réponses

Avatar
Jacques Caron
Salut,

On Tue, 21 Jun 2005 08:09:54 +0200, wrote:

-la date courrante


perldoc -f localtime

-la semaine courrante (date_start date_end) à partir de la date d'un jour


Pas forcément trivial, mais voir POSIX::mktime (man POSIX; man mktime)
puis localtime, ensuite il suffit de retrancher le bon nombre de jours
(d'après wday) et refaire un POSIX::mktime pour avoir le début (et pareil
pour la fin).

-le mois courrant


localtime.

Jacques.

Avatar
Alexandre Jaquet
Salut,

On Tue, 21 Jun 2005 08:09:54 +0200, wrote:

-la date courrante



perldoc -f localtime

-la semaine courrante (date_start date_end) à partir de la date d'un jour



Pas forcément trivial, mais voir POSIX::mktime (man POSIX; man mktime)
puis localtime, ensuite il suffit de retrancher le bon nombre de jours
(d'après wday) et refaire un POSIX::mktime pour avoir le début (et
pareil pour la fin).

-le mois courrant



localtime.

Jacques.


Merci mais je suis tombé sur un superbe tutorial sur les dates (qui plus
est en français) : ¨

http://datetime.mongueurs.net/Perl/faq.html#6_6_Comment_determiner_le_mercredi_de_la_semaine_correspondant_a_la_date_du_jour


Avatar
Paul Gaborit
À (at) Tue, 21 Jun 2005 08:09:54 +0200,
Alexandre Jaquet <""alexjaquet"@[no spam]msn.com"> écrivait (wrote):
J'ai besoin dans mon script de déterminer :

-la date courrante
-la semaine courrante (date_start date_end) à partir de la date d'un jour
-le mois courrant

Afin d'extraire des données

quelqu un aurait t il déjà implémenter ceci ?


En supposant que vous travaillez avec le fuseau horaire local, vous pouvez
utiliser la fonction 'localtime' :

my ($jour, $mois, $annee) = (localtime)[3,4,5];
$mois += 1; # en interne les mois commencent à zéro
$annee += 1900;
print sprintf("%02d/%02d/%d", $jour, $mois, $annee), "n"; # (*)

La date courante jj/mm/aaaa indique le mois courant ;-)

Pour la semaine (jour de départ et de fin), c'est plus dur. Cela dépend de la
convention choisie (debut de semaine dimanche ou lundi), de la semaine choisie
(certains jours n'existent pas dans notre calendrier) et si il y a changement
d'heure ou non... En fait, il faut tout calculer. Je vous conseille d'utiliser
le module DateTime et en particulier la méthode 'truncate'.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Paul Gaborit
À (at) Tue, 21 Jun 2005 08:32:17 +0200,
"Jacques Caron" écrivait (wrote):
-la semaine courrante (date_start date_end) à partir de la date d'un jour


Pas forcément trivial, mais voir POSIX::mktime (man POSIX; man mktime) puis
localtime, ensuite il suffit de retrancher le bon nombre de jours (d'après
wday) et refaire un POSIX::mktime pour avoir le début (et pareil pour la
fin).


Il y a des cas où cela ne marche pas car la durée des jours n'est pas toujours
de 24h (et parce que certains jours n'existent pas). Mieux vaut utiliser le
module DateTime.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>


Avatar
Jacques Caron
On Tue, 21 Jun 2005 09:04:46 +0200, Paul Gaborit
wrote:

Il y a des cas où cela ne marche pas car la durée des jours n'est pas
toujours de 24h (et parce que certains jours n'existent pas). Mieux vaut
utiliser le module DateTime.


Tout dépend de la période considérée. Sur la période courante, tous les
jours existent, et les variations sont très faibles. Mais le module en
question gère probablement tout ce qu'il faut de la meilleure façon...

Jacques.

Avatar
Alexandre Jaquet
À (at) Tue, 21 Jun 2005 08:09:54 +0200,
Alexandre Jaquet <""alexjaquet"@[no spam]msn.com"> écrivait (wrote):

J'ai besoin dans mon script de déterminer :

-la date courrante
-la semaine courrante (date_start date_end) à partir de la date d'un jour
-le mois courrant

Afin d'extraire des données

quelqu un aurait t il déjà implémenter ceci ?



En supposant que vous travaillez avec le fuseau horaire local, vous pouvez
utiliser la fonction 'localtime' :

my ($jour, $mois, $annee) = (localtime)[3,4,5];
$mois += 1; # en interne les mois commencent à zéro
$annee += 1900;
print sprintf("%02d/%02d/%d", $jour, $mois, $annee), "n"; # (*)

La date courante jj/mm/aaaa indique le mois courant ;-)

Pour la semaine (jour de départ et de fin), c'est plus dur. Cela dépend de la
convention choisie (debut de semaine dimanche ou lundi), de la semaine choisie
(certains jours n'existent pas dans notre calendrier) et si il y a changement
d'heure ou non... En fait, il faut tout calculer. Je vous conseille d'utiliser
le module DateTime et en particulier la méthode 'truncate'.



Ce script me donne la date du début de la semaine, mais il me le donne
sous le format : 2005-06-20T00:00:00

quel est le meilleur moyen de formaté la sortie pour n obtenir que
2005-06-20
un substring d index of T ?

#!perl -w
use POSIX qw(strftime);
use strict;
use warnings;
use DateTime;

my $dt4 = DateTime->today();
my $n = get_day_in_same_week($dt4,1,1);
print "$n";

sub get_day_in_same_week {
my $dt = shift;
my $cible = shift;
my $debut_semaine = shift || 1;

# Quel est le rang de la date source dans la semaine (0..6) ?
my $wday = ($dt->day_of_week() - $debut_semaine + 7) % 7;

# Quel est le rang du jour cible dans la semaine (0..6) ?
$cible = ($cible - $debut_semaine + 7) % 7;

# Ajuste la date source pour correspondre au jour cible
return $dt->clone()->add(days => $cible - $wday);
}


Avatar
Paul Gaborit
À (at) Tue, 21 Jun 2005 09:27:00 +0200,
Alexandre Jaquet <""alexjaquet"@[no spam]msn.com"> écrivait (wrote):
Ce script me donne la date du début de la semaine, mais il me le donne sous
le format : 2005-06-20T00:00:00

quel est le meilleur moyen de formaté la sortie pour n obtenir que
2005-06-20 un substring d index of T ?

#!perl -w
use POSIX qw(strftime);
use strict;
use warnings;
use DateTime;

my $dt4 = DateTime->today();
my $n = get_day_in_same_week($dt4,1,1);
print "$n";

sub get_day_in_same_week {
my $dt = shift;
my $cible = shift;
my $debut_semaine = shift || 1;

# Quel est le rang de la date source dans la semaine (0..6) ?
my $wday = ($dt->day_of_week() - $debut_semaine + 7) % 7;

# Quel est le rang du jour cible dans la semaine (0..6) ?
$cible = ($cible - $debut_semaine + 7) % 7;

# Ajuste la date source pour correspondre au jour cible
return $dt->clone()->add(days => $cible - $wday);
}


use strict;
use warnings;
use DateTime;

my $maintenant = DateTime->today;
my $debut_semaine = $maintenant->truncate(to => 'week');
print $debut_semaine->ymd, "n";

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Jogo
Le 21 juin 2005, Alexandre Jaquet a écrit dans fr.comp.lang.perl :

Merci mais je suis tombé sur un superbe tutorial sur les dates


Sinon, voir Date::Calc

Avatar
Alexandre Jaquet
À (at) Tue, 21 Jun 2005 09:27:00 +0200,
Alexandre Jaquet <""alexjaquet"@[no spam]msn.com"> écrivait (wrote):

Ce script me donne la date du début de la semaine, mais il me le donne sous
le format : 2005-06-20T00:00:00

quel est le meilleur moyen de formaté la sortie pour n obtenir que
2005-06-20 un substring d index of T ?

#!perl -w
use POSIX qw(strftime);
use strict;
use warnings;
use DateTime;

my $dt4 = DateTime->today();
my $n = get_day_in_same_week($dt4,1,1);
print "$n";

sub get_day_in_same_week {
my $dt = shift;
my $cible = shift;
my $debut_semaine = shift || 1;

# Quel est le rang de la date source dans la semaine (0..6) ?
my $wday = ($dt->day_of_week() - $debut_semaine + 7) % 7;

# Quel est le rang du jour cible dans la semaine (0..6) ?
$cible = ($cible - $debut_semaine + 7) % 7;

# Ajuste la date source pour correspondre au jour cible
return $dt->clone()->add(days => $cible - $wday);
}



use strict;
use warnings;
use DateTime;

my $maintenant = DateTime->today;
my $debut_semaine = $maintenant->truncate(to => 'week');
print $debut_semaine->ymd, "n";



Jolid méthode merci :)


Avatar
Paul Gaborit
À (at) Tue, 21 Jun 2005 12:49:11 +0200,
Jogo écrivait (wrote):
Le 21 juin 2005, Alexandre Jaquet a écrit dans fr.comp.lang.perl :

Merci mais je suis tombé sur un superbe tutorial sur les dates


Sinon, voir Date::Calc


Il existe de nombreux modules de gestion de dates ou du temps (dont
Date::Calc, Date::Manip, etc.). Mais aucun ne propose l'ensemble des
fonctionnalités nécessaires ou alors sous une forme un peu anarchique.

Un panorama de ce qui existe a été fait :
<http://www.perl.com/pub/a/2003/03/13/datetime.html>

Partant de ce constat, DateTime a été créé et, à travers une architecture
homogène, unifié et ouverte et en s'inspirant de tous les modules existants,
il offre tout ce qu'il faut pour gérer les dates, les heures, les durées, les
formats, les calendriers divers, etc.

DateTime est donc *le* module (ou plutôt l'ensemble de modules) à utiliser.
<http://datetime.perl.org/>

Évidemment, les anciens modules sont tout de même maintenus car, d'une part,
certains les utilisent encore et, d'autre part, certaines fonctionnalités
(d'un usage peu courant) ne sont pas encore complètement intégrées dans
DateTime.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>