Encontrei um problema no trabalho hoje. Precisava consultar por horário, mas os resultados da consulta estavam incorretos. Por exemplo, se você deseja saber os membros que se cadastraram no site entre 12/10/2007 e 31/10/2007, após selecionar a data, clique no botão de consulta, e você descobrirá que as informações sobre os membros cadastrados em 31/10/2007 é basicamente Não aparece 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. Adicione datas
Função DataAdicionar
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 é necessário. Uma expressão de string que representa o intervalo de tempo a ser adicionado. Consulte a seção Configurações para valores numéricos.
(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.
configurar
O parâmetro intervalo pode ter os seguintes valores:
Descrição da configuração
aaaa ano
q trimestre
m mês
y o número de dias em um ano
dia d
w Dia da semana
semanas
h horas
n minutos
segundos
ilustrar
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 a 30 dias do dia atual ou um horário a 45 minutos de agora. 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:
NovaData = DataAdicionar(m, 1, 31 de janeiro de 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. Subtração de data
Função DataDiff
Retorna o intervalo de tempo entre duas datas.
DataDiff(intervalo, data1, data2 [, primeiro dia da semana [, primeira semana do ano]])
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 numéricos.
(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 numéricos.
(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 numéricos.
configurar
O parâmetro intervalo pode ter os seguintes valores:
Descrição da configuração
aaaa ano
q trimestre
m mês
y o número de dias em um ano
dia d
w Dia da semana
semanas
h horas
n minutos
segundos
O parâmetro firstdayofweek pode ter os seguintes valores:
Descrição do valor constante
vbUseSystem 0 Use a configuração da API National Language Support (NLS).
vbSunday 1 Sunday (padrão)
vbSegunda-feira 2 Segunda-feira
vbTerça-feira 3 Terça-feira
vbQuarta-feira, 4 Quarta-feira
vbQuinta-feira, 5 Quinta-feira
vbSexta-feira, 6 Sexta-feira
vbSábado 7 Sábado
O parâmetro firstweekofyear pode ter os seguintes valores:
Descrição do valor constante
vbUseSystem 0 Use a configuração da API National Language Support (NLS).
vbFirstJan1 1 Começa na semana de 1º de janeiro (padrão).
vbFirstFourDays 2 começa com a primeira semana do ano novo que tem pelo menos quatro dias.
vbFirstFullWeek 3 começa com a primeira semana completa do ano novo.
ilustrar
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 o número de dias em um ano (y) ou dias (d). Quando intervalo é o número de dias 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 semanas (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 parâmetro firstdayofweek afeta cálculos usando 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 toda vez 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.