Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/01/2003, 05:57
Avatar de DanielRey
DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 3 meses
Puntos: 1
Hola Delfin

Ignoro si existe dicha función, pero no es muy difícil de implementar.

Así lo hice yo (cuando daba mis primeros y últimos pasos con Perl):

#!/usr/bin/perl
%meses = (1, "Enero", 2, "Febrero", 3, "Marzo", 4, "Abril", 5, "Mayo", 6, "Junio", 7, "Julio", 8, "Agosto", 9, "Setiembre", 10, "Octubre", 11, "Noviembre", 12, "Diciembre");
$fecha = $ARGV[0];
$fecha_ok = 1;
($dia, $mes, $ano) = split (/\//, $fecha);
use integer;
#if ($ano < 2000 or $ano > 2030) {
# $fecha_ok = 0;
# print "Año fuera de rango\n";
# }
#else {
$bisiesto = (($ano % 4) == 0);
# }
if ($mes < 1 or $mes > 12) {
$fecha_ok = 0;
print "Mes no valido\n";
}

if ($dia < 0 or $dia > 31) {
$fecha_ok = 0;
print "Dia no valido\n";
}
elsif (($mes == 4 or $mes == 6 or $mes == 9 or $mes == 11) and $dia > 30) {
$fecha_ok = 0;
print "Dia no valido\n";
}
elsif ($mes == 2 and $dia > 29) {
$fecha_ok = 0;
print "Dia no valido\n";
}
elsif ($mes == 2 and $dia == 29) {
unless ($bisiesto) {
$fecha_ok = 0;
print "Dia no valido\n";
}
}
if ($fecha_ok) {
print "Hoy es $dia de $meses{$mes} de $ano\n";
print juliano($ano, $mes, $dia);
print "\n";
print 3/4;
print "\n";
}
exit;


sub juliano
{
my($year, $month, $day) = @_;
my($tmp);
# my($secs);

# use Carp;
# confess() unless defined $day;

$tmp = $day - 32075 - 2415019
+ 1461 * ( $year + 4800 - ( 14 - $month ) / 12 )/4
+ 367 * ( $month - 2 + ( ( 14 - $month ) / 12 ) * 12 ) / 12
- 3 * ( ( $year + 4900 - ( 14 - $month ) / 12 ) / 100 ) / 4
;

return($tmp);
}

Si tu rango de fechas está entre 1901 y 2099, funcionará la sencilla sentencia:
$bisiesto = (($ano % 4) == 0);
Si tu rango de fechas es mayor, avisame y lo ampliamos.

Un año es bisiesto si, es divisible por 4, pero no por 100, a menos que sea divisible por 400.
Es decir, 1900 no es bisiesto pero 2000 si.

Suerte