Qual data você deveria testar?
Metade do teste de datas é mover o relógio. A outra metade é saber para onde movê-lo. Uma calculadora on-line diz que dia será daqui a noventa dias. Ela não diz que esse dia é feriado bancário, nem que é o último dia do trimestre.
04/08/2008 colado, e as duas
leituras mostradas em vez de uma adivinhada.Dias úteis, com feriados reais
“Dez dias úteis depois” não é aritmética - depende do calendário de que país você está contando. Mesma data de início, mesmos dez dias, duas respostas diferentes:
$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar us-banking result: 2027-09-16T00:00:00 $ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar pl result: 2027-09-15T00:00:00
Um dia de diferença, e a calculadora diz por quê se você perguntar sobre a data intermediária:
$ chrono calc --base 2027-09-06T00:00:00 --calendar us-banking metadata: weekday Monday business day no (us-banking) holiday Labor Day what this date lands on: public holiday (weekend and holiday marks follow the us-banking calendar)
Os Estados Unidos e a Polônia acompanham o programa como calendários de referência, escolhidos porque, juntos, exercitam todos os tipos de regra que existem: datas fixas, o n-ésimo dia da semana de um mês, datas calculadas a partir da Páscoa e a regra americana pela qual um feriado que cai em um sábado é observado na sexta-feira anterior. Adicionar um país é um arquivo de dados, não uma mudança de código.
Todos os formatos de uma vez
O aplicativo testado quer a data na forma que espera. Em vez de fazer você converter, a calculadora imprime todas - e uma máscara personalizada para as que não se encaixam em nenhum padrão.
$ chrono calc --preset year-2038 --zone +00:00 Chrono Mock - date calculator preset: year-2038 - 2038 boundary explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)? result: 2038-01-19T03:14:07 formats: ISO date 2038-01-19 ISO datetime 2038-01-19T03:14:07+00:00 US 01/19/2038 PL 19.01.2038 epoch (s) 2147483647 epoch (ms) 2147483647000 FILETIME 137919572470000000 RFC 1123 Tue, 19 Jan 2038 03:14:07 GMT ... what this date lands on: at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)
Esse valor epoch não é coincidência - 2147483647 é exatamente o maior número que um
inteiro de 32 bits com sinal comporta, que é toda a razão pela qual essa data importa.
Lendo uma data de trás para frente
O sentido contrário é igualmente útil: cole uma data tirada de um log e descubra o que ela é.
Quando o formato é ambíguo - e 04/08 é ambíguo em metade do mundo -,
as duas leituras são mostradas em vez de uma ser adivinhada, porque foi de um
palpite que saiu o relatório de bug original.
$ chrono calc --analyze 04/08/2027 Chrono Mock - date analysis input: 04/08/2027 (ambiguous - month/day order differs by locale) US MM/DD/YYYY: 2027-04-08 (Thursday) PL DD/MM/YYYY: 2027-08-04 (Wednesday)
Quatro meses de diferença, em dias da semana diferentes. Uma data ISO não é ambígua e é lida como tal, e algo que não é uma data de forma alguma é recusado em vez de adivinhado.
Montada com passos, não com uma frase
Um momento é um ponto de partida mais passos, e o resultado intermediário é mostrado depois de cada um, de modo que uma expressão que dá uma resposta surpreendente mostra onde desviou. Cinco tipos de passo: deslocar por uma unidade, definir a hora do dia, ajustar a um limite de período, ir para o dia útil mais próximo e reexpressar em outro fuso horário.
# O último segundo antes da virada do ano chrono calc --base today --snap eoy # Noventa dias úteis depois, no calendário bancário americano chrono calc --base today --shift +90bd --calendar us-banking # Dezoito anos e um dia atrás, para uma verificação de idade chrono calc --base today --shift -18y --shift -1d
Qualquer data calculada vai direto para uma sessão de substituição, e --json emite o
mesmo resultado em formato para máquinas.
As datas que valem a pena testar →