Mar Nov 29, 2005 1:34 pm
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
| Manejo de Fechas |
|
|
como puedo obtener la fecha de 3 dias más es decir si estamos a 29/11/2005 quisiera desplegar 02/12/2005.  |
|
|
|
Mar Nov 29, 2005 1:40 pm
|
 |
monoswim
Vive para Perl en Español

|
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
|
|
|
|
Mar Nov 29, 2005 1:56 pm
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
| con Add_Delta_Days |
|
|
con la siguiente modulo no se podria realizar??
| Perl: | use Date:: Calc qw(
Add_Delta_Days
);
($year, $month, $day) = Add_Delta_Days ($Syear, $Smon, $Sday, 3); |
 |
|

Mar Nov 29, 2005 2:32 pm
|
 |
Perl user
Maestro Honorario

|
Registrado: 03 Nov 2004
Mensajes: 385
|
|
| Re: Manejo de Fechas |
|
|
| kaeri escribió: | como puedo obtener la fecha de 3 dias más es decir si estamos a 29/11/2005 quisiera desplegar 02/12/2005.  |
Te recomiendo que utilices módulos del proyecto DateTime de Perl, los cuales están trabajandos profesionalmente, están actualmente mantenidos y tienen una interfaz limpia.
| Código: |
use DateTime;
my $dt = DateTime->now;
print $dt->add( days => 3 )->dmy( '/' ); # 'dd/mm/aaaa'
|
O en su defecto, para hacer algo mas "formal" puedes utilizar el operador '+' que está sobrecargado para jugar con objetos de fechas, intentando sumar un objeto DateTime con un DateTime::Duration, los resultados al final serán iguales.
Saludos,
Ultima edición por Perl user el Mar Nov 29, 2005 2:43 pm, editado 2 veces |
|

Mar Nov 29, 2005 2:39 pm
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
|
|
|
(Lo que sigue contempla el caso de que queramos pasar una fecha a otra, no a partir de la fecha actual)
| Código: |
use Date::Manip;
Date_Init( "Language=Spanish", "DateFormat=non-US" );
$fecha = DateCalc("29/11/2005", "+ 3 dias laborales");
print UnixDate($fecha,"%d/%m/%Y"); |
Este módulo está bien, pero no funcionará a menos que lo parcheéis según pongo aqui. Una vez hecho eso, es una delicia que te sume fechas, laborales o no.
| Código: |
use Date::Simple qw(date);
$fecha = date("2000-02-28");
print $fecha + 1; # 2000-02-29
|
Realmente simple, una delicia.
| Código: |
use DateTime::Format::ISO8601;
$iso = DateTime::Format::ISO8601->new;
$fecha = $iso->parse_datetime("20051129");
$fecha->add( days => 3 );
print $fecha->ymd("/"); |
Este es el que yo utilizo porque casi todos los ficheros que manejamos incorporan fechas en formato ISO8601. Puede parecer muy lioso de usar, pero hay que tener en cuenta que sólo hay que definir un objeto iso una sóla vez en el programa.
| Código: |
use DateTime;
$fecha =DateTime->new(
year => 2005,
month=> 11,
day => 29
);
print $fecha->add( days => 3 )->ymd("/"); |
Esta es la forma normal de trabajo que tengo con las fechas y necesito hacer operaciones con ellas. Es un poco lioso cuando se trata de hacer matemáticas con ellas, como por ejemplo saber la diferencia de tiempo entre dos fechas, pero bueno, para el resto, vale...
| Código: |
use Time::ParseDate;
use DateTime;
$fechaepoch = parsedate("29/11/2005", UK=>1, GMT=>1);
$fecha = DateTime->from_epoch(epoch=>$fechaepoch);
print $fecha->add(days=>3)->ymd("/");' |
Y esta es la forma que uso si las fechas me vienen en el formato dia/mes/año.
| Código: |
use DateTime::Format::DateManip;
Date::Manip::Date_Init( "Language=Spanish", "DateFormat=non-US" );
my $dt = DateTime::Format::DateManip->parse_datetime( "29/11/2005" );
print $dt->add(days=>3)->ymd("/"); |
Esta versión es más compacta, porque usa DateManip y DateTime.
| Código: |
use DateTime::Format::Strptime;
my $Strp = new DateTime::Format::Strptime(
pattern => '%d/%m/%Y',
locale => 'es_ES',
time_zone => 'Europe/Madrid',
);
my $dt = $Strp->parse_datetime('29/11/2005');
print $dt->add(days=>3)->ymd("/"); # 2005/12/02
print $dt->month_name; # diciembre |
Me parece demasiado prolijo... pero es la más flexible si la fecha se indica de otras formas, como por ejemplo:
| Código: |
use DateTime::Format::Strptime;
my $Strp = new DateTime::Format::Strptime(
pattern => '%d %B %Y',
locale => 'es_ES',
time_zone => 'Europe/Madrid',
);
my $dt = $Strp->parse_datetime('30 diciembre 2005');
print $dt->add(days=>3)->ymd("/"); # 2006/01/02 |
Estoy buscando formas más sencillas para interpretar fechas en Español. Date::Parse sólo trae soporte para Inglés, Francés, Alemán e Italiano. ¿Algún voluntario para hacer la parte de Español?
De todas formas, lo ideal es siempre usar las fechas en formato ISO8601 y los módulos DateTime.
Ultima edición por explorer39 el Mie Dic 07, 2005 1:43 pm, editado 3 veces |
|

Jue Dic 01, 2005 1:51 pm
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
| Comparar fechas |
|
|
como puedo comparar fechas?
por ejemplo de una que esta capturada en una base de datos de postgres y una que yo obtengo de un formulario? |
|
Jue Dic 01, 2005 2:14 pm
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
|
|
|
Yo no lo he probado, pero hay módulos específicos para interpretar fechas de postgres, como DateTime::Format::Pg:
| Código: |
use DateTime::Format::Pg;
my $dt = DateTime::Format::Pg->parse_datetime( '2003-01-16 23:12:01' ); |
Luego dependerá del formato en que leas las fechas desde el formulario en la web.
Y luego, vete a DateTime y buscas por 'compare'. |
|

Vie Dic 02, 2005 10:34 am
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
| comparar fechas |
|
|
Hola
Gracias por sus aportaciones
Ya no voy a comparar de una base de datos si no lo que tengo que hacer es comparar una fecha que introduzco desde un formulario, es decir que la fecha que se capture no debe ser menor a la del sistema mas 3 dias es decir
si estamos a 02/12/2005 + 3 dias = 05/12/2005 debe arrojarme un mensaje si selecciono el 04/12/2005 pues es un dia antes.
he estado probando y si me lo hace si selecicono fechas del mes de cicimebre pero si ya me voy al 2006 y selecciono 01/01/2006 me dice que es menor esta fecha.
| Código: |
use DateTime;
my $dt = DateTime->now;
$fecha = $dt->add( days => 3 )->ymd;
($d,$m,$y)=split /-/,$in{'ff646'};
($year,$month,$day)=split /-/,$fecha;
if ($d < $day and $m < $month and $y < $year){
print "es menor la fech aintroducida";
}
|
|
|

Vie Dic 02, 2005 11:25 am
|
 |
explorer39
Perlero Frecuente

|
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
|
|
|
|
|
| Código: |
use DateTime;
my %in = ( ff646 => '01-01-2006' ); # Formulario
my ($d,$m,$y)=split /-/,$in{'ff646'}; # Fecha del formulario
my $entrada = DateTime->new( # Creamos nuevo objeto DateTime
year => $y, # con la fecha del formulario
month=> $m,
day => $d,
);
my $fecha = DateTime->today->add( days => 3 );# Hoy, mas 3 días
# Comparamos
if ( DateTime->compare( $entrada, $fecha ) < 0 ){
print "es menor la fecha introducida";
} |
| Código: |
use DateTime;
use Time::ParseDate;
my $entrada = parsedate('04-12-2005', UK=>1, GMT=>1);
$entrada = DateTime->from_epoch(epoch=>$entrada);
my $fecha = DateTime->today->add( days => 3 );
if ( DateTime->compare( $entrada, $fecha ) < 0 ){
print "es menor la fecha introducida";
} |
| Código: |
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";
} |
Ultima edición por explorer39 el Vie Dic 02, 2005 11:50 am, editado 1 vez |
|

Vie Dic 02, 2005 11:42 am
|
 |
kaeri
Perlero Nuevo

|
Registrado: 19 Ago 2004
Mensajes: 53
Ubicación: México
|
|
| Gracias |
|
|
| Ya quedo, muchisimas gracias |
|
Powered by phpBB © 2001, 2005 phpBB Group
|