La idea es esta: escriba una función para imprimir el período de tiempo desde ahora / fecha actual (en el momento en que se llama a la función) hasta una fecha proporcionada como argumento.
Suposiciones
- La fecha de entrada siempre será mañana o más tarde, en el futuro.
- La fecha de entrada nunca será más de 10 años en el futuro.
Reglas:
- La salida debe estar en este formato: "[z año (s)], [x mes (es)], y día (s) hasta -Fecha de entrada-"
- El marco de tiempo de salida (día / mes / año) debe estar pluralizado correctamente. es decir
1 month
, no1 months
- La entrada puede estar en el formato de fecha que prefiera (15/03/12 - 15 marzo 2012 - 2012.03.15).
Ejemplo: suponiendo que el programa se ejecute el 15 de marzo de 2012:
- Fecha de entrada de
3/20/12
=5 days until 3/20/12
- NO Fecha de entrada de
4/16/12
=1 month, 1 days until 3/20/12
- Fecha de entrada de
2012.04.20
=1 month, 5 days until 2012.04.20
- NO Fecha de entrada de
2012.04.20
=36 days until 2012.04.20
- Fecha de entrada de
10/31/17
=5 years, 7 months, 16 days until 10/31/17
- Fecha de entrada de
3/15/13
=1 year until 3/15/13
Este es el código de golf, por lo que gana el código de longitud más corta.
Supongo que por tener una fecha límite, seleccionaré una respuesta sobre:
23 de marzo de 2012!
(Esta es mi primera pregunta de CG, ¡así que estaré encantado de corregir cualquier error de mi parte!)
now until <input time>
pnow-<input time>
Respuestas:
R, 99 caracteres
Sé que es una especie de trampa, pero R se trata de sus paquetes y ¡ lubridate es muy conveniente para este tipo de tareas!
Uso:
fuente
PHP, 315 caracteres
Uso:
Toma fechas en un
dd/mm/yyyy
formato. He usado el cálculo de la duración del mes de Griffin (de nuevo ), aunque tuve que ponerle corchetes adicionales para que la prioridad funcionara correctamente. También he dejado algunos saltos de línea para que sea un poco más fácil de leer.fuente
Rubí (213)
toma fechas en cualquier formato
Date.parse
acepta. Intenté solo conyyyy-mm-dd
para obtener también semanas, agregue:
y
[0,'week'],
(entre mes y día). los días siempre serán< 7
fuente
uninitialized constant Object::Date (NameError)
... Creo que estás usando laDate
clase RailsVBA:
766631 CaracteresGracias a mellamokb por ayudar a acortar la creación de cadenas y
IIf
.Sé que
VBA
definitivamente no se presta al golf de código tan bien como a otros idiomas, pero es en lo que soy bueno (no experto). :-)¡Este ha sido un ejercicio divertido para mí!
fuente
If y > 0 Then a = y & " year,":If y > 1 Then a = y & " years,"
podría combinarse paraa = y & " year" & Left("s", y - 1) & ","
1 year
,1 month
,1 day
. He corregido esto en la respuesta. ¡Realmente hizo un código más corto!If v < w Then d = w - v:If v = w Then d = 0
aIf v <= w Then d = w - v
un ahorro de 20 caracteres adicionales. Actualizaré la respuesta si tengo un cambio más significativo para publicar.JavaScript (ES6), 125 bytes
Como la respuesta de Paolo usó una biblioteca externa, haré lo mismo. Node.js se trata de paquetes NPM y moment + HumanizeDuration es muy conveniente para esta tarea.
Entornos de nodo
Entorno del navegador
Como las bibliotecas declaran variables globales, en realidad es un poco más corto (102 bytes). No está claro si necesito incluir las etiquetas de secuencia de comandos necesarias para cargar en el JavaScript de terceros, por lo que contaré oficialmente el Nodo.
CoffeeScript, también 125 bytes
fuente
PHP, 151 caracteres
fuente
echo date_diff(new DateTime(),new DateTime($argv[1]))->format('%yyears, %mmonths, %a days');
tiene 92 caracteres de largo, cuando se llama en la línea de comando.