L'idée est la suivante: Écrivez une fonction pour imprimer la durée entre la date actuelle et la date d'aujourd'hui (au moment où la fonction est appelée) jusqu'à une date fournie en argument.
Hypothèses:
- La date d'entrée sera toujours demain ou plus tard, à l'avenir.
- La date d'entrée ne sera jamais supérieure à 10 ans dans le futur.
Règles:
- La sortie doit être dans ce format: "[z année (s)], [x mois (s)], y jour (s) jusqu'à -Date d'entrée-"
- La période de sortie (jour / mois / année) doit être correctement pluralisée. c'est-à
1 month
- dire pas1 months
- L'entrée peut être dans le format de date que vous préférez (15/03/12 - 15 mars 2012 - 15/03/2012).
Exemple: en supposant que le programme est exécuté le 15 mars 2012:
- Date d'entrée de
3/20/12
=5 days until 3/20/12
- NON Entrez la date de
4/16/12
=1 month, 1 days until 3/20/12
- Date d'entrée de
2012.04.20
=1 month, 5 days until 2012.04.20
- NON Entrez la date de
2012.04.20
=36 days until 2012.04.20
- Date d'entrée de
10/31/17
=5 years, 7 months, 16 days until 10/31/17
- Date d'entrée de
3/15/13
=1 year until 3/15/13
C'est le golf par code, donc le code le plus court gagne.
Je suppose que pour avoir un délai, je sélectionnerai une réponse sur:
23 mars 2012!
(Ceci est ma première question CG, donc je serai heureux de corriger toute erreur de question de ma part!)
now until <input time>
pnow-<input time>
Réponses:
R, 99 caractères
Je sais que c'est une sorte de tricherie, mais R est tout au sujet de ses paquets et la lubrification est si pratique pour ce genre de tâches!
Usage:
la source
PHP, 315 caractères
Usage:
Prend les dates dans un
dd/mm/yyyy
format. J'ai utilisé le calcul de la durée du mois de Griffin ( encore une fois ), même si j'ai dû y coller des crochets supplémentaires pour que la priorité fonctionne correctement. J'ai également laissé quelques sauts de ligne pour le rendre un peu plus facile à lire.la source
Rubis (213)
prend des dates dans n'importe quel format
Date.parse
accepte. Essayé juste avecyyyy-mm-dd
pour obtenir également des semaines, ajoutez:
et
[0,'week'],
(entre le mois et le jour). les jours seront alors toujours< 7
la source
uninitialized constant Object::Date (NameError)
... Je pense que vous utilisez laDate
classe RailsVBA:
766631 CharsMerci à mellamokb d' avoir aidé à raccourcir la création de chaîne et
IIf
.Je sais que
VBA
cela ne se prête certainement pas au golf de code ainsi qu'à d'autres langages, mais c'est ce que je suis bon (pas expert). :-)Cela a été un exercice amusant pour moi!
la source
If y > 0 Then a = y & " year,":If y > 1 Then a = y & " years,"
pourrait être combiné ensemble poura = y & " year" & Left("s", y - 1) & ","
1 year
,1 month
,1 day
. J'ai corrigé cela dans la réponse. En fait, cela a rendu le code plus court!If v < w Then d = w - v:If v = w Then d = 0
àIf v <= w Then d = w - v
pour une économie d'un 20 caractères supplémentaires. Je mettrai à jour la réponse si j'ai un changement plus important à publier.JavaScript (ES6), 125 octets
Puisque la réponse de Paolo a utilisé une bibliothèque externe, je ferai de même. Node.js est tout au sujet des packages NPM et moment + HumanizeDuration est si pratique pour cette tâche!
Environnements de nœuds
Environnement de navigateur
Étant donné que les bibliothèques déclarent des variables globales, il est en fait un peu plus court (102 octets). Il n'est pas clair si je dois inclure les balises de script nécessaires au chargement dans le JavaScript tiers, donc je compte officiellement le nœud.
CoffeeScript, également 125 octets
la source
PHP, 151 caractères
la source
echo date_diff(new DateTime(),new DateTime($argv[1]))->format('%yyears, %mmonths, %a days');
ses 92 caractères de long, lorsqu'elle est appelée sur la ligne de commande.