• Publicidad

Comparar fechas

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Comparar fechas

Notapor majitop1986 » 2009-03-25 11:44 @530

¡Hola a todos!

Tengo una duda: estoy haciendo un script en el cual tengo dos fechas en el formato 'YYYY-mm-dd' (2009-03-25), y estas dos fechas tengo que compararlas de manera que si la fecha actual -o sea la del sistema-, está entre el rango de la fecha1 y la de la fecha2, me devuelva un true o 1 o lo que sea; caso contrario lo opuesto.

¿Alguien tiene idea de cómo hacer ésto?

Estaba leyendo en un foro que hablaban sobre manejo de fechas y encontré este pequeño código.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
use DateTime::Format::Strptime;
my $Strp = new DateTime::Format::Strptime(pattern=>'%d-%m-%Y');

my $entrada = $Strp->parse_datetime( '06-12-2005' ); # Formulario
my $fecha = DateTime->today->add( days => 3 );       # Hoy, mas 3 días
if ( DateTime->compare( $entrada, $fecha ) < 0 ){    # Comparación
  print "es menor la fecha introducida";
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


pero yo no necesito sumarle tres días :? Y ademas aquí se comparan sólo dos fechas.
majitop1986
Perlero nuevo
Perlero nuevo
 
Mensajes: 64
Registrado: 2008-04-02 14:04 @628

Publicidad

Notapor explorer » 2009-03-25 12:17 @553

Esta es una de las muchas formas de hacerlo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use DateTime::Format::Strptime;

my $Strp = new DateTime::Format::Strptime(pattern=>'%Y-%m-%d');

my $fecha1 = '2009-02-25';
my $fecha2 = '2010-10-10';

my $dt_fecha1 = $Strp->parse_datetime( $fecha1 );
my $dt_fecha2 = $Strp->parse_datetime( $fecha2 );

my $dt_hoy = DateTime->now();

if (
        DateTime->compare( $dt_fecha1, $dt_hoy ) <= 0
    and
        DateTime->compare( $dt_hoy, $dt_fecha2 ) <= 0
) {
    print "Hoy estamos entre las dos fechas.\n";
}
else {
    print "¡Estamos fuera de rango!\n";
}
__END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 majitop1986 » 2009-03-25 12:21 @556

Muchas gracias, explorer, por responder tan rápido como siempre... ¡ya lo voy a poner en práctica para ver qué tal me va!
majitop1986
Perlero nuevo
Perlero nuevo
 
Mensajes: 64
Registrado: 2008-04-02 14:04 @628

Notapor majitop1986 » 2009-03-25 15:32 @689

Hola, explorer. Una pregunta: puse en práctica tu ejemplo pero me sale este error:

Código: Seleccionar todo
Can't locate DateTime/Format/Strptime.pm in @INC (@INC contains: /usr/lib/perl5/5.8.5/i386-linux-thread-multi /usr/lib/perl5/5.8.5 /usr/lib/perl5/site_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.1/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.5 /usr/lib/perl5/site_perl/5.8.4 /usr/lib/perl5/site_perl/5.8.3 /usr/lib/perl5/site_perl/5.8.2 /usr/lib/perl5/site_perl/5.8.1 /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.5/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.4/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.3/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.2/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.1/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.5 /usr/lib/perl5/vendor_perl/5.8.4 /usr/lib/perl5/vendor_perl/5.8.3 /usr/lib/perl5/vendor_perl/5.8.2 /usr/lib/perl5/vendor_perl/5.8.1 /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl .) at mail_recordatorio.pl line 10.


Si no me equivoco es porque no tengo instalado el módulo que indica el error, ¿no? ¿Alguna idea de cómo lo puedo instalar?
majitop1986
Perlero nuevo
Perlero nuevo
 
Mensajes: 64
Registrado: 2008-04-02 14:04 @628

Notapor explorer » 2009-03-25 17:02 @751

Veo que estás en Linux.

Entonces, para instalar el módulo, te vale con ejecutar el comando:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
cpan DateTime::Format::Strptime
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
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 majitop1986 » 2009-03-25 17:32 @772

Ya lo instale, pero me sale un error al correr el script. Mira el error. Dime qué opinas.

Código: Seleccionar todo
Can't locate object method "new" via package "DateTime::Format::StrpTime" (perhaps you forgot to load "DateTime::Format::StrpTime"?) at recordatorio.pl line 11.


La linea 11 es
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $strp = new DateTime::Format::StrpTime(pattern=>'%Y-%m-%d');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


:s lo tengo como pusiste en tu ejemplo.
majitop1986
Perlero nuevo
Perlero nuevo
 
Mensajes: 64
Registrado: 2008-04-02 14:04 @628

Notapor explorer » 2009-03-25 17:58 @790

El módulo es

DateTime::Format::Strptime

y no

DateTime::Format::StrpTime

Es más cómodo usar el ratón para copiar y pegar en lugar de escribirlo a mano: puedes equivocarte incluso en una sola letra, como te ha pasado ;)
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

Re: Comparar fechas

Notapor gema258 » 2013-01-18 14:29 @645

Hola,
soy principiante en esto del mundo de la programación y tengo el mismo problema que majitop1986: me da este mensaje:

Can't locate DateTime/Format/Strptime.pm in @INC (@INC contains: C:/Dwimperl/perl/site/lib C:/Dwimperl/perl/vendor/lib C:/Dwimperl/perl/lib .) at fecha.pl line 3.

Y en la línea 3 el código que tengo es:

use DateTime::Format::Strptime;

¿Alguna solución? ¿Me tengo que descargar algo? La versión de Perl que tengo es <v5.14.2>

Muchas gracias, un saludo.
gema258
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2013-01-18 14:24 @642

Re: Comparar fechas

Notapor explorer » 2013-01-20 19:04 @836

Bienvenida a los foros de Perl en Español, gema258.

Sí, en efecto, el mensaje de error se refiere a que debes instalar el módulo.

Depende del sistema operativo en que estés trabajando, pero los pasos básicos son sencillos.

Luego, depende de si estás en Linux o en Windows, claro.
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

Re: Comparar fechas

Notapor gema258 » 2013-01-21 06:04 @294

¡Hola!

Ya instalé Perl Package Manager siguiendo los pasos que muy bien indicas en viewtopic.php?t=3284

Pero me sigue dando el mismo error. También he instalado el paquete DateTime-Format-Strptime (como se ve en la imagen).

¿Puede que el error esté relacionado con la "Install Area"?

No sé si estará relacionado, pero para ejecutar el script uso PADRE y a lo mejor está "buscando" el paquete en otro directorio... la verdad es que no tengo ni idea.

Mil gracias por su ayuda.
Adjuntos
PPM.jpg
PPM.jpg (119.9 KiB) Visto 5182 veces
gema258
Perlero nuevo
Perlero nuevo
 
Mensajes: 3
Registrado: 2013-01-18 14:24 @642

Siguiente

Volver a Intermedio

¿Quién está conectado?

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

cron