A idéia é a seguinte: Escreva uma função para imprimir o período de tempo a partir de agora / data de hoje (no momento em que a função é chamada) até uma data fornecida como argumento.
Premissas:
- A data de entrada será sempre amanhã ou mais tarde, no futuro.
- A data de entrada nunca será superior a 10 anos no futuro.
Regras:
- A saída deve estar neste formato: "[z ano (s)], [x mês (s)], y dia (s) até -Data de entrada-"
- O período de saída (dia / mês / ano) deve ser pluralizado corretamente. ou seja
1 month
, não1 months
- A entrada pode estar no formato de data que você preferir (15/3/12 - 15 de março de 2012 - 2012.03.15).
Exemplo: Supondo que o programa seja executado em 15 de março de 2012:
- Data de entrada de
3/20/12
=5 days until 3/20/12
- NÃO Data de entrada de
4/16/12
=1 month, 1 days until 3/20/12
- Data de entrada de
2012.04.20
=1 month, 5 days until 2012.04.20
- NÃO Data de entrada de
2012.04.20
=36 days until 2012.04.20
- Data de entrada de
10/31/17
=5 years, 7 months, 16 days until 10/31/17
- Data de entrada de
3/15/13
=1 year until 3/15/13
Isso é código de golfe, então o código de menor comprimento vence.
Suponho que, por ter um prazo, selecionarei uma resposta em:
23 de março de 2012!
(Esta é a minha primeira pergunta de CG, por isso, ficarei feliz em corrigir quaisquer erros de pergunta da minha parte!)
now until <input time>
pnow-<input time>
Respostas:
R, 99 caracteres
Eu sei que é meio trapaceiro, mas o R é tudo sobre suas embalagens e o lubrificado é tão conveniente para esse tipo de tarefa!
Uso:
fonte
PHP, 315 caracteres
Uso:
Tira datas em um
dd/mm/yyyy
formato. Usei o cálculo da duração do mês de Griffin ( novamente ), mas tive que colocar colchetes extras para fazer a precedência funcionar corretamente. Também deixei algumas quebras de linha para facilitar a leitura.fonte
Rubi (213)
aceita datas em qualquer formato
Date.parse
aceita. Tentei apenas comyyyy-mm-dd
para também receber semanas, adicione:
e
[0,'week'],
(entre mês e dia). dias serão sempre sempre< 7
fonte
uninitialized constant Object::Date (NameError)
... Eu acho que você está usando o RailsDate
classeVBA:
766631 caracteresObrigado a mellamokb por ajudar a diminuir a criação de strings e
IIf
.Sei que
VBA
definitivamente não se presta ao código do golfe, bem como a alguns outros idiomas, mas é nisso que sou bom (não especialista). :-)Este foi um exercício divertido para mim!
fonte
If y > 0 Then a = y & " year,":If y > 1 Then a = y & " years,"
poderiam ser combinados em conjunto paraa = y & " year" & Left("s", y - 1) & ","
1 year
,1 month
,1 day
. Eu corrigi isso na resposta. Na verdade, ele criou um código mais curto!If v < w Then d = w - v:If v = w Then d = 0
paraIf v <= w Then d = w - v
para uma economia de mais 20 caracteres. Atualizarei a resposta se tiver uma alteração mais significativa para postar.JavaScript (ES6), 125 bytes
Como a resposta de Paolo usou uma biblioteca externa, farei o mesmo. O Node.js tem tudo a ver com pacotes NPM e o momento + HumanizeDuration é tão conveniente para esta tarefa!
Ambientes de nó
Ambiente do navegador
Como as bibliotecas declaram variáveis globais, na verdade é um pouco menor (102 bytes). Não está claro se preciso incluir as tags de script necessárias para carregar no JavaScript de terceiros; portanto, contarei o Node oficialmente.
CoffeeScript, também 125 bytes
fonte
PHP, 151 caracteres
fonte
echo date_diff(new DateTime(),new DateTime($argv[1]))->format('%yyears, %mmonths, %a days');
tem 92 caracteres, quando chamado na linha de comando.