Encontrei um problema no trabalho hoje. Precisava consultar por horário, mas os resultados da consulta estavam incorretos. Por exemplo, para saber os associados que se cadastraram no site entre 12/10/2007 e 31/10/2007, após selecionar a data, clique no botão “Consultar” para localizar os associados que se cadastraram em 31/10/2007. As informações não são exibidas e os resultados são os mesmos após vários testes. O depurador descobriu que havia um problema com a instrução SQL.
A instrução SQL é a seguinte: SELECT * FROM userinfo WHERE regtime >= '2007-10-12' AND regtime <= '2007-10-31'. À primeira vista, parece não haver erro nesta instrução SQL, mas após comparar os valores salvos nos campos correspondentes do banco de dados, verifica-se que os valores salvos não estão na forma de um simples data, mas na forma de data + hora, ou seja: aaaa-MM-dd HH:mm:ss, quando a instrução SQL determina o tamanho do regtime e '2007-10-31', ele pensará que '2007- 10-31' está escrito de forma incompleta, portanto os dois valores não serão considerados iguais. O que fazer?
Não se preocupe, o ASP nos fornece funções de adição e subtração de datas para nos ajudar a resolver este problema.
1. Adição de data
A função DateAdd retorna a data à qual o intervalo de tempo especificado foi adicionado.
DateAdd (intervalo, número, data)
A sintaxe da função DateAdd possui os seguintes parâmetros (1) intervalo é obrigatório. Uma expressão de string que representa o intervalo de tempo a ser adicionado. Consulte a seção Configurações para valores.
(2) o número é obrigatório. Expressão numérica que indica o número de intervalos de tempo a serem adicionados. As expressões numéricas podem ser positivas (obtendo uma data no futuro) ou negativas (obtendo uma data no passado).
(3) a data é obrigatória. Variante ou texto que representa a data à qual o intervalo deve ser adicionado.
Descrição Você pode usar a função DateAdd para adicionar ou subtrair um intervalo de tempo especificado de uma data. Por exemplo, você pode usar DateAdd para calcular uma data daqui a 30 dias ou um horário daqui a 45 minutos. Para adicionar um intervalo de tempo em “dias” até a data, você pode usar “dias do ano” (“y”), “dias” (“d”) ou “dias da semana” (“w”).
A função DateAdd não retorna datas inválidas. O exemplo a seguir adiciona um mês a 31 de janeiro de 1995:
NewDate = DateAdd("m", 1, "31-Jan-95")
Neste exemplo, DateAdd retorna 28 de fevereiro de 1995, e não 31 de fevereiro de 1995. Se a data for 31 de janeiro de 1996, será retornado 29 de fevereiro de 1996 porque 1996 é um ano bissexto.
Se a data calculada for anterior a 100 DC, ocorrerá um erro.
Se o número não for um valor longo, ele será arredondado para o número inteiro mais próximo antes do cálculo.
2. A função DateDiff de subtração de data retorna o intervalo de tempo entre duas datas.
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
A sintaxe da função DateDiff possui os seguintes parâmetros:
(1) intervalo é necessário. Uma expressão de string usada para calcular o intervalo de tempo entre data1 e data2. Consulte a seção Configurações para valores.
(2) data1, data2 são obrigatórias. Expressão de data. Duas datas usadas para cálculo.
(3) Primeiro dia da semana opcional. Uma constante que especifica o primeiro dia da semana. Se não for especificado, o padrão será domingo. Consulte a seção Configurações para valores.
(4) Primeira semana do ano opcional. Constante que especifica a primeira semana do ano. Se não for especificado, o padrão será a semana de 1º de janeiro. Consulte a seção Configurações para valores.
Descrição A função DateDiff é usada para determinar o número de intervalos de tempo especificados que existem entre duas datas. Por exemplo, você pode usar DateDiff para calcular o número de dias entre duas datas ou o número de semanas entre hoje e o último dia do ano.
Para calcular o número de dias entre a data1 e a data2, você pode usar “dias no ano” (“y”) ou “dias” (“d”). Quando o intervalo é “dia da semana” (“w”), DateDiff retorna o número de semanas entre duas datas. Se data1 for segunda-feira, DateDiff contará o número de segundas-feiras antes de data2. Este resultado contém data2, mas não data1. Se o intervalo for "semana" ("ww"), a função DateDiff retornará o número de semanas entre duas datas na tabela de calendário. A função conta o número de domingos entre data1 e data2. DateDiff avaliará date2 se date2 for domingo, mas não date1 mesmo se date1 for domingo.
Se a data1 for posterior à data2, a função DateDiff retornará um número negativo.
O argumento firstdayofweek afeta os cálculos usando os símbolos separadores "w" e "ww".
Se data1 ou data2 for uma data literal, o ano especificado se tornará uma parte fixa da data. Mas se data1 ou data2 estiver entre aspas (" ") e o ano for omitido, o ano atual será inserido sempre que a expressão data1 ou data2 for avaliada no código. Isso torna possível escrever código de programa que funcione em anos diferentes.
Quando o intervalo for "ano" ("aaaa"), compare 31 de dezembro com 1º de janeiro do ano seguinte. Embora a diferença seja na verdade de apenas um dia, DateDiff retorna 1, indicando uma diferença de um ano.