Share via


Cálculos de data e hora

O Objeto Date objeto e métodos relacionados são usados para executar o calendário comum e o relógio de tarefas, como manipular e comparando as datas e calculando o tempo decorrido.

A definição de uma data como a data atual

Quando você cria uma instância de Objeto Date, ele contém um valor que representa um instante específico no tempo, precisão de milissegundos. Em seguida, você pode ler ou alterar esse valor de data e hora.

O exemplo a seguir mostra como obter a data atual e exibi-lo no formato dd/mm/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);

A definição de uma data específica

No exemplo a seguir, uma data específica é passada para o construtor.

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

JScripté bastante flexível, sobre o formato de data. Ele permite variantes como, por exemplo, 8-24-2009, 24 de agosto de 2009 e 24 de agosto de 2009.

Você também pode especificar um tempo, conforme mostrado nos exemplos a seguir.

// 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);

Adição e subtração de dias

Um exemplo anterior usa o getMonth, getDate e getFullYear métodos de obtenção de partes da data. Um grupo equivalente do conjunto de métodos permite que você alterar o valor de Date objeto.

O exemplo a seguir mostra como você pode definir uma data para a data do dia anterior. Ele obtém a data do dia atual e o dia do mês e, em seguida, define o dia para um dia anteriormente usando o Método de setDate.

// 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);

JScriptincrementos para o próximo mês ou ano conforme necessário. Por exemplo, se a data atual é o 28 de janeiro dos e adicionar 7 dias, ele corretamente define a data para 4 de fevereiro. O exemplo a seguir adiciona uma semana até a data atual. O exemplo também limpa o tempo a partir da data.

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

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

Trabalhando com os meses e anos

O exemplo a seguir contém um loop que gera a saída de datas, começando com 1 mês a partir da data atual. O incremento de meses corretamente para o próximo ano.

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);
}

O exemplo a seguir obtém a data de um ano antes da data atual.

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

O exemplo a seguir obtém o primeiro dia do mês seguinte o mês atual. Ele incrementa o mês e, em seguida, define o dia do mês como 1.

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

    return myDate;
}

O exemplo a seguir determina o último dia do mês atual. Para fazer isso, ele determina o primeiro dia do mês seguinte e, em seguida, subtrai um dia.

// 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);

Trabalhando com os dias da semana

O Método de getDay (não deve ser confundida com getDate) retorna um valor entre 0 e 6 para indicar o dia da semana. Domingo é zero, a segunda é 1 e assim por diante. O exemplo a seguir mostra como determinar o dia da semana atual.

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];

O exemplo a seguir retorna a data de sexta-feira antes da data atual.

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);

O exemplo a seguir determina a data dos EUA feriado de ação de Graças, que é definido como a quinta-feira a quarta em novembro. O script localiza em 1º de novembro do ano atual, e localiza a quinta-feira primeira e, em seguida, adiciona três 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);

Calculando o tempo decorrido

O getTime método retorna o número de milissegundos transcorridos desde o zero data e hora da meia-noite de 1º de janeiro de 1970. Para uma data anterior a essa data, getTime retorna um número negativo.

Você pode usar getTime para definir um início e fim da hora para calcular um tempo decorrido. Ele pode ser usado para medir unidades pequenas, como, por exemplo, alguns segundos e grandes unidades, como, por exemplo, dias.

Determinar o tempo decorrido em segundos

Este exemplo calcula o tempo decorrido em segundos. Ele funciona independentemente de quanto tempo o intervalo. O milissegundos relatado pelo getTime método são um valor absoluto do zero Data. Portanto, eles continuarem a aumentar por meio de alterações no dia, hora e minuto.

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 o tempo decorrido em dias

Para trabalhar com unidades mais gerenciáveis, você pode dividir o milissegundos fornecido pelo getTime método por um número apropriado. Por exemplo, para transformar o milissegundos em dias, divida o número por 86,400,000 (1000 x 60 60 x 24).

O exemplo a seguir mostra quanto tempo decorrido desde o primeiro dia do ano atual. Ele usa uma sucessão de operações de divisão para calcular o tempo decorrido em dias, horas, minutos e segundos. Ele não conta para o horário de verão.

// 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 a duração do usuário

O exemplo a seguir determina a idade do usuário em anos. Subtrai o ano de nascimento do ano atual e então subtrai 1 se o aniversário não ocorreu ainda no ano atual. Ele não usa milissegundos decorridos, porque não se baseia em um intervalo estrito nossa definição de idade.

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.");
ObservaçãoObservação

Você deve ter cuidado ao comparar as datas para certificar-se de que você está fazendo corretamente. Para saber mais sobre isso na próxima seção deste tópico.

O exemplo a seguir mostra um método para calcular a duração do usuário em meses. O script inclui um teste para determinar se o aniversário do usuário ocorreu no mês atual.

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.");

Comparando as datas

Em JScript, se você estiver comparando objetos usando maiores ou menor que (<,> < =, ou > =), os valores dos objetos são avaliados antes da comparação seja efetuada. Comparações de igualdade funcionam de modo diferente. Se você estiver usando o == , a comparação retornará true somente se ambos os lados do operador se referir ao mesmo objeto. O != operador opera de forma semelhante.

O getTime método retorna o número de milissegundos entre meia-noite, 1º de janeiro de 1970 e o valor do tempo de Objeto Date. Ele permite que você compare as representações de milissegundo de duas datas.

Uma comparação de data com base em milissegundos, no entanto, não funcionará corretamente se um do Date objetos contém um horário diferente de meia-noite.

Se você criar um Date objeto sem incluir um argumento do construtor, o tempo associado a data é a hora atual. Se você criar um Date o objeto para uma data específica, o tempo associado a data é meia-noite no início do dia.

O exemplo a seguir verifica se a data atual é igual uma data especificada. Para definir a data atual no todayAtMidn, o script cria um Date o objeto para o ano, mês e dia.

// 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");
}

Consulte também

Conceitos

Resumo do tipo de dados