Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Módulos » Comprobar fechas  RESUELTO Responder al tema
Nuevo tema


Página 1 de 1  [ 7 mensajes ] 
 
Nota Sab Ago 21, 2010 9:59 am

Perlero Nuevo
Registrado: Mié Ago 18, 2010 12:55 pm
Mensajes: 7
Comprobar fechas
Buenas tardes, ¿alguien sabe de algún módulo que compruebe si una fecha introducida es correcta? Es decir, que no tenga 31 días un mes que solo puede tener 30, y ya si tiene la función de que febrero tenga solo 29 cuando es bisiesto...

Gracias.


Nota Sab Ago 21, 2010 10:07 am
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Comprobar fechas
Pero... no nos has dicho en qué formato vas a leer la fecha... ¿ISO 8601? ¿día/mes/año? ¿otro?

_________________
JF^D Perl programming


Nota Sab Ago 21, 2010 11:03 am

Perlero Nuevo
Registrado: Mié Ago 18, 2010 12:55 pm
Mensajes: 7
Re: Comprobar fechas
En principio la fecha la leo en formato yyyy/mm/dd pero no tengo problema en pasar la fecha a día, mes y año o cambiar el formato.


Nota Sab Ago 21, 2010 5:34 pm
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Comprobar fechas
Bueno, pues si en vez de las '/' hubieras usado los '-', entonces sí que serían auténticas fechas en formato ISO 8601, por lo que podrías haber usado el módulo DateTime::Format::ISO8601, así que en su lugar, usaremos uno más genérico, el DateTime::Format::Strptime:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use common::sense;
  3.  
  4. use DateTime::Format::Strptime;
  5.  
  6. my @fechas = qw(
  7.     2010-08-22
  8.     2009/02/29
  9.     2000/04/31
  10.     2000/02/29
  11.     2000/1/1
  12. );
  13.  
  14. my $parser = DateTime::Format::Strptime->new (
  15.     pattern     => '%Y/%m/%d',
  16.     locale      => 'es_ES',
  17.     time_zone   => 'Europe/Madrid',
  18. );
  19.  
  20. my $dt;
  21.  
  22. for my $fecha (@fechas) {
  23.  
  24.     $dt = $parser->parse_datetime( $fecha );
  25.  
  26.     say "$fecha : ", (($dt) ? 'es' : 'no es'), ' correcta';
  27. }
  28.  
sale:
Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
2010-08-22 : no es correcta
2009/02/29 : no es correcta
2000/04/31 : no es correcta
2000/02/29 : es correcta
2000/1/1 : es correcta

Observa que la primera fecha no es correcta porque tiene guiones. Las dos siguientes no son correctas (no fue bisiesto el año pasado, ni abril tiene 31 días). Las siguientes sí son correctas.

Bueno, esta es una forma de hacerlo. Hay muchas más.

_________________
JF^D Perl programming


Nota Dom Ago 22, 2010 4:35 am

Perlero Nuevo
Registrado: Mié Ago 18, 2010 12:55 pm
Mensajes: 7
Re: Comprobar fechas
explorer escribió:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  say "$fecha : ", (($dt) ? 'es' : 'no es'), ' correcta';
 

Es justo lo que buscaba pero esta línea no la termino de entender. Por lo que he visto, say() es equivalente a print() con un salto de línea al final. Puesto que estoy haciendo un cgi no puedo utilizarlo. Luego lo que verdaderamente no sé que es, es lo de (($dt) ? 'es' : 'no es').


Nota Dom Ago 22, 2010 10:30 am
Avatar de Usuario
Administrador
Registrado: Dom Jul 24, 2005 6:12 pm
Ubicación: Valladolid, España
Mensajes: 9492
Re: Comprobar fechas  RESUELTO
El say() se utiliza a partir de la versión Perl v5.10. Te vale con poner un 'use 5.010;' al principio del programa, para hacer uso de él. Yo uso el módulo common::sense, que lo activa, además de otras características de lo que tiene que ser un Perl moderno.

La expresión (($dt) ? 'es' : 'no es') es un operador ternario (Operador condicional).

Lo que hace es lo siguiente: si $dt contiene un valor "verdadero", entonces la expresión devuelve la cadena 'es'. Si no, devuelve la cadena 'no es'.

Lo de "verdadero" se refiere a si la variable contiene un objeto DateTime o no. Si lo contiene, es que ha conseguido analizar la $fecha que le hemos pasado, y por lo tanto, es una fecha válida.

Con esto, además de validar la fecha, conseguimos tener la fecha convertida a objeto DateTime, con lo que podremos hacer muchas operaciones relacionadas con las fechas.

_________________
JF^D Perl programming


Nota Dom Ago 22, 2010 3:16 pm

Perlero Nuevo
Registrado: Mié Ago 18, 2010 12:55 pm
Mensajes: 7
Re: Comprobar fechas
Gracias, yo no lo entendía ya que estoy acostumbrado al if-elsif-else y también al print().


Responder al tema  [ 7 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO