• Publicidad

Intervalo de fechas

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Notapor explorer » 2008-10-21 07:35 @358

No es muy complicado...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use DateTime;

my $fecha = DateTime->new(
    year    => 2008,
    month   => 9,
    day     => 22,
);

for (1..10) {
    print $fecha->ymd('-'), "\n";

    $fecha->add(days => 7);
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
2008-09-22
2008-09-29
2008-10-06
2008-10-13
2008-10-20
2008-10-27
2008-11-03
2008-11-10
2008-11-17
2008-11-24
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Notapor AgeValed » 2008-10-21 09:38 @443

Tengo la fecha de otra forma. Lo que hice fue (capaz que le sea útil a alguien en un futuro...)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
        $year += 1900;
        $mon++;
        my $hoy = $year."/".$mon."/".$mday." ".$hour.":".$min.":".$sec;
       
        my $fechaInicio = 1212289200;
        my $suma = 7*24*60*60;
        my $fechaU = $fechaInicio;

        ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($fechaInicio);
        $year += 1900;
        $mon++;
        my $inicio = $year."/".$mon."/".$mday." ".$hour.":".$min.":".$sec;

        while ($fechaU <= time()) {

                 $fechaU += $suma;
                ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($fechaU);
                $year += 1900;
                $mon++;
                 $fin = $year."/".$mon."/".$mday." ".$hour.":".$min.":".$sec;

                 #comandos varios!

                $inicio = $fin;
         }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Un poco más rebuscado pero me sirve para lo que tengo que hacer...

Al final terminé haciendo con Perl lo que iba a hacer con SQL, jajajá

Gracias a todos por su ayuda.
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Notapor explorer » 2008-10-21 14:56 @664

La salida de
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use strict;
use warnings;
use diagnostics;

my ($sec,$min,$hour,$mday,$mon,$year) = localtime;
$year += 1900;
$mon  ++;
my $hoy = "$year/$mon/$mday $hour:$min:$sec";

my $fechaInicio = 1212289200;
my $suma        = 7*24*60*60;

my $fechaU      = $fechaInicio;
($sec,$min,$hour,$mday,$mon,$year) = localtime($fechaInicio);
$year += 1900;
$mon  ++;

my $inicio = "$year/$mon/$mday $hour:$min:$sec";
print "Inicio: $inicio";

while ($fechaU <= time) {
    $fechaU += $suma;
    ($sec,$min,$hour,$mday,$mon,$year) = localtime($fechaU);
    $year += 1900;
    $mon  ++;

    my $fin = "$year/$mon/$mday $hour:$min:$sec";
    print "Fin: $fin";

    #comandos varios!

    $inicio = $fin;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
es
Código: Seleccionar todo
Inicio: 2008/6/1 5:0:0
Fin: 2008/6/8 5:0:0
Fin: 2008/6/15 5:0:0
Fin: 2008/6/22 5:0:0
Fin: 2008/6/29 5:0:0
Fin: 2008/7/6 5:0:0
Fin: 2008/7/13 5:0:0
Fin: 2008/7/20 5:0:0
Fin: 2008/7/27 5:0:0
Fin: 2008/8/3 5:0:0
Fin: 2008/8/10 5:0:0
Fin: 2008/8/17 5:0:0
Fin: 2008/8/24 5:0:0
Fin: 2008/8/31 5:0:0
Fin: 2008/9/7 5:0:0
Fin: 2008/9/14 5:0:0
Fin: 2008/9/21 5:0:0
Fin: 2008/9/28 5:0:0
Fin: 2008/10/5 5:0:0
Fin: 2008/10/12 5:0:0
Fin: 2008/10/19 5:0:0
Fin: 2008/10/26 4:0:0
Humm... es un poco más fea... :)

En cuestión de control de tiempos y fechas, siempre es recomendable usar DateTime.

Otra forma es usar strftime() del módulo POSIX (que sí viene incluido de base) que nos puede ayudar a formatear la salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -l
use strict;
use warnings;
use diagnostics;

use POSIX qw(strftime);

my $hoy = strftime '%F %T', localtime;
print "Hoy:    $hoy";

my $fechaInicio = 1212289200;
my $suma        = 7*24*60*60;
my $fechaU      = $fechaInicio;

my $inicio = strftime '%F %T', localtime $fechaInicio;
print "Inicio: $inicio";

while ($fechaU <= time) {
    $fechaU += $suma;
    my $fin = strftime '%F %T', localtime $fechaU;

    print "Fin:    $fin";

    #comandos varios!

    $inicio = $fin;
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Sale:
Código: Seleccionar todo
Hoy:    2008-10-21 21:46:59
Inicio: 2008-06-01 05:00:00
Fin:    2008-06-08 05:00:00
Fin:    2008-06-15 05:00:00
Fin:    2008-06-22 05:00:00
Fin:    2008-06-29 05:00:00
Fin:    2008-07-06 05:00:00
Fin:    2008-07-13 05:00:00
Fin:    2008-07-20 05:00:00
Fin:    2008-07-27 05:00:00
Fin:    2008-08-03 05:00:00
Fin:    2008-08-10 05:00:00
Fin:    2008-08-17 05:00:00
Fin:    2008-08-24 05:00:00
Fin:    2008-08-31 05:00:00
Fin:    2008-09-07 05:00:00
Fin:    2008-09-14 05:00:00
Fin:    2008-09-21 05:00:00
Fin:    2008-09-28 05:00:00
Fin:    2008-10-05 05:00:00
Fin:    2008-10-12 05:00:00
Fin:    2008-10-19 05:00:00
Fin:    2008-10-26 04:00:00
A propósito... el día 26 marca una hora menos porque, justamente ese día, se produce el cambio de hora de invierno aquí en España.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor AgeValed » 2008-10-22 06:30 @312

Gracias, lo mismo lo uso para hacer consultas en una DB ¡y ahí no influye! Lo mismo es muy bueno para tener en cuenta, ¡¡además queda un poco más lindo el código!!

Saludos...
AgeValed
Perlero nuevo
Perlero nuevo
 
Mensajes: 33
Registrado: 2008-09-19 09:35 @441

Anterior

Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados