Compartir a través de


Cálculos de fecha y hora

El objeto Date (Objeto) y los métodos relacionados se utilizan para efectuar tareas de calendario y de reloj habituales, como manipular y comparar fechas y calcular el tiempo transcurrido.

Establecer una fecha en la fecha actual

Cuando se crea una instancia de Date (Objeto), contiene un valor que representa un momento determinado en el tiempo, con una precisión de milisegundos. Puede leer o cambiar este valor de fecha y hora.

En el siguiente ejemplo se muestra cómo obtener la fecha de hoy y mostrarla en el formato mm/dd/aa.

// Create a date object. Because no arguments are
// passed, the date object contains the current date and
// time (to the millisecond).
var dt : Date = new Date();

// Determine and display the month, day, and year.
// The getMonth method uses a zero offset for
// the month number.
var month : Number = dt.getMonth()+1;
var day : Number = dt.getDate();
var year : Number = dt.getFullYear();

print (month + "/" + day + "/" + year);

Establecer una fecha concreta

En el siguiente ejemplo, se pasa una fecha concreta al constructor.

// Create a date object for a specific date.
var dt : Date = new Date('8/24/2009');

JScript es bastante flexible en cuanto a formatos de fecha. Permite variantes como 24-08-2009, 24 de agosto de 2009 y 24 ago 2009.

También puede especificar una hora, como se muestra en los siguientes ejemplos.

// Create a date object for a specific date and time.
// The time format is hours:minutes:seconds.
var dtA : Date = new Date('8/24/2009 14:52:10');

// Create a date object for the same date and time as in
// the previous example.
// The parameters are:
// year, month, day, hours, minutes, seconds.
// August is month 7 because January is month 0.
var dtB : Date = new Date(2009, 7, 24, 14, 52, 10);

Agregar y quitar días

En un ejemplo anterior se utilizan los métodos getMonth, getDate y getFullYear para obtener partes de la fecha. Un grupo equivalente de métodos Set permite cambiar el valor del objeto Date.

En el siguiente ejemplo se muestra cómo puede establecer una fecha en la fecha del día anterior. Obtiene la fecha del día actual y el día del mes y, a continuación, establece el día en un día anterior utilizando setDate (Método).

// Get the current day's date and day of month.
var myDate : Date = new Date();
var dayOfMonth : Number = myDate.getDate();

// Reset myDate to one day earlier.
myDate.setDate(dayOfMonth - 1);

JScript incrementa al mes o año siguiente cuando así se requiere. Por ejemplo, si la fecha actual es 28 de enero y agrega 7 días, establece correctamente la fecha en el 4 de febrero. En el siguiente ejemplo se agrega una semana a la fecha actual. También se borra la hora de la fecha.

var myDate : Date = new Date();
myDate.setDate(myDate.getDate() + 7);

// Clear the time.
myDate.setHours(0, 0, 0, 0);

Trabajar con meses y años

El siguiente ejemplo contiene un bucle que genera las fechas comenzando un mes después de la fecha actual. Los meses se incrementan correctamente hasta el año siguiente.

var currentDate : Date = new Date();

for(var index : int = 1; index <= 12; index++)
{
    var myDate : Date = new Date();
    myDate.setMonth(currentDate.getMonth() + index);

    print ("Month+" + index + ": " + myDate);
}

En el siguiente ejemplo se obtiene la fecha que es un año anterior a la fecha actual.

var myDate : Date = new Date();
myDate.setFullYear (myDate.getFullYear() - 1);

En el siguiente ejemplo se obtiene el primer día del mes que sigue al mes en curso. Incrementa el mes y, a continuación, establece el día del mes en 1.

function GetFirstOfNextMonth() : Date
{
    var myDate : Date = new Date();
    myDate.setMonth(myDate.getMonth() + 1);
    myDate.setDate(1);

    return myDate;
}

En el siguiente ejemplo se determina el último día del mes actual. Para ello, se determina el primero del mes siguiente y se resta un día.

// Determine the last day of the current month.
// The GetFirstOfNextMonth() function is in the previous example.
var myDate : Date = GetFirstOfNextMonth();
myDate.setDate (myDate.getDate() - 1);

Trabajar con días de la semana

El getDay (Método) (que no debe confundirse con getDate) devuelve un valor entre 0 y 6 para indicar el día de la semana. El domingo es cero, el lunes es 1, etc. En el siguiente ejemplo se muestra cómo determinar el día de la semana.

var arDays : Array = ["Sunday", "Monday", "Tuesday",
    "Wednesday", "Thursday", "Friday", "Saturday"];

var today : Date = new Date();
var dayNum : Number = today.getDay();
var dayOfWeek : String = arDays[dayNum];

En el siguiente ejemplo se devuelve la fecha del viernes antes de la fecha actual.

function getPreviousDayOfWeek(dayOfWeekNum : Number) : Date
{
    var dt : Date = new Date();
    if (dt.getDay() == dayOfWeekNum)
    {
        // It is currently the day of the week specified in
        // the function call. Subtract one week.
        dt.setDate(dt.getDate() - 7);
    }
    else
    {
        // Go back a day at a time until arriving
        // at the specified day of week.
        while (dt.getDay() != dayOfWeekNum)
        {
            dt.setDate(dt.getDate() - 1);
        }
    }

    return dt;
}

var friday : Number = 5;
var myDate : Date = getPreviousDayOfWeek(friday);

En el siguiente ejemplo se determina la fecha para un festivo en Estados Unidos, el Día de Acción de Gracias, que se define como el cuarto jueves de noviembre. El script encuentra el 1 de noviembre del año actual, después busca el primer jueves y le agrega tres semanas.

// Determine the current date and clear the time.
var myDate : Date = new Date();
myDate.setHours(0, 0, 0, 0);

// Determine November 1 of the current year.
var november : Number = 10;
myDate.setMonth(november);
myDate.setDate(1);

// Find Thursday.
var thursday : Number = 4;
while(myDate.getDay() != thursday)
{
    myDate.setDate(myDate.getDate() + 1) ;
}

// Add 3 weeks.
myDate.setDate(myDate.getDate() + 21);

Calcular el tiempo transcurrido

El getTime (Método) devuelve el número de milisegundos transcurridos desde la fecha y hora cero de la medianoche del 1 de enero de 1970. Para una fecha anterior a esa, getTime devuelve un número negativo.

Puede utilizar getTime para establecer una hora de inicio y de fin para calcular un tiempo transcurrido. Se puede utilizar para medir unidades pequeñas, como unos segundos, y unidades grandes, como días.

Determinar el tiempo transcurrido en segundos

En este ejemplo se calcula el tiempo transcurrido en segundos. Funciona sin tener en cuenta la duración del intervalo. Los milisegundos notificados por el método getTime son un valor absoluto de la fecha cero. Por consiguiente, siguen aumentando a través de cambios en el minuto, la hora y el día.

Console.Write("What is your name? ");

var startTime : Date = new Date();
var name : String = Console.ReadLine();
var endTime : Date = new Date();

var elapsed : Number = 
    (endTime.getTime() - startTime.getTime()) / 1000; 

Console.WriteLine("You took " + elapsed +
    " seconds to type your name.");

Determinar el tiempo transcurrido en días

Para trabajar con unidades más cómodas, puede dividir los milisegundos proporcionados por el método getTime por un número adecuado. Por ejemplo, para convertir los milisegundos en días, divida el número por 86.400.000 (1000 x 60 x 60 x 24).

En el siguiente ejemplo se muestra el tiempo que ha transcurrido desde el primer día del presente año. Se utiliza una sucesión de operaciones de división para calcular el tiempo transcurrido en días, horas, minutos y segundos. No tiene en cuenta el horario de verano.

// Set the unit values in milliseconds.
var msecPerMinute : Number = 1000 * 60;
var msecPerHour : Number = msecPerMinute * 60;
var msecPerDay : Number = msecPerHour * 24;

// Determine the current date and time.
var today : Date = new Date();

// Determine January 1, at midnight, of the current year.
var january : Number = 0;
var startOfYear : Date = new Date();
startOfYear.setMonth(january);
startOfYear.setDate(1);
startOfYear.setHours(0, 0, 0, 0);

// Determine the difference in milliseconds.
var interval : Number = today.getTime() - startOfYear.getTime();

// Calculate how many days the interval contains. Subtract that
// many days from the interval to determine the remainder.
var days : Number = Math.floor(interval / msecPerDay );
interval = interval - (days * msecPerDay );

// Calculate the hours, minutes, and seconds.
var hours : Number = Math.floor(interval / msecPerHour );
interval = interval - (hours * msecPerHour );

var minutes : Number = Math.floor(interval / msecPerMinute );
interval = interval - (minutes * msecPerMinute );

var seconds : Number = Math.floor(interval / 1000 );

// Display the result.
var msg : String = days + " days, " + hours + " hours, "
 + minutes + " minutes, " + seconds + " seconds.";

print(msg);

Determinar la edad del usuario

En el siguiente ejemplo se determina la edad del usuario en años. Para ello, se resta el año del nacimiento del año en curso y, a continuación, se resta 1 si el cumpleaños no se ha producido todavía en el año en curso. No se utilizan los milisegundos transcurridos porque nuestra definición de edad no está basada en un intervalo estricto.

var birthday : Date = new Date("8/1/1985");
var today : Date = new Date();
var years : Number = today.getFullYear() - birthday.getFullYear();

// Reset birthday to the current year.
birthday.setFullYear(today.getFullYear());

// If the user's birthday has not occurred yet this year, subtract 1.
if (today < birthday)
{
    years--;
}
print("You are " + years + " years old.");

Nota

Debe tener el cuidado al comparar las fechas y asegurarse de que está haciéndolo correctamente. Puede obtener más información al respecto en la sección siguiente de este tema.

En el siguiente ejemplo se muestra un método para calcular la edad del usuario en meses. El script incluye una prueba que determina si el cumpleaños del usuario ya ha pasado en el mes en curso.

var birthday : Date = new Date("8/1/1985");
var today : Date = new Date();
var years : Number = today.getFullYear() - birthday.getFullYear();

// Determine the number of months.
var months : Number = (years * 12) +
    (today.getMonth() - birthday.getMonth());

// Adjust the months if the birthday has not occurred
// yet in the current month.
if (today.getDate() < birthday.getDate())
{
    months--;
}
print("You are " + months + " months old.");

Comparar fechas

En JScript, si está comparando los objetos utilizando mayor que o menor que, (<, >, <= o >=) se evalúan los valores de los objetos antes de que se realice la comparación. Las comparaciones de igualdad funcionan de manera diferente. Si está utilizando al operador ==, la comparación solo devuelve true si ambos lados del operador hacen referencia al mismo objeto. El operador != funciona de forma muy parecida.

El getTime (Método) devuelve el número de milisegundos transcurridos entre la medianoche del 1 de enero de 1970 y la valor de hora de Date (Objeto). Permite comparar las representaciones en milisegundos de dos fechas.

Una comparación de la fecha basada en milisegundos, sin embargo, no funciona correctamente si uno de los objetos Date contiene una hora que no sea la medianoche.

Si crea un objeto Date sin incluir un argumento de constructor, la hora asociada a la fecha es la hora actual. Si crea un objeto Date para una fecha concreta, la hora asociada a la fecha es la medianoche en el inicio de ese día.

En el siguiente ejemplo se comprueba si la fecha actual es igual que una fecha especificada. Para establecer la fecha actual en todayAtMidn, el script crea un objeto Date para el año, mes y día en curso.

// Determine the current date and time, and then
// determine the current date at midnight.
var now : Date = new Date(); 
var todayAtMidn : Date =
    new Date(now.getFullYear(), now.getMonth(), now.getDate());

// Set specificDate to a specified date at midnight.
var specificDate : Date = new Date("9/21/2009");

// Compare the two dates by comparing the millisecond
// representations.
if (todayAtMidn.getTime() == specificDate.getTime())
{
    print("Same");
}
else
{
    print("Different");
}

Vea también

Conceptos

Resumen de tipos de datos