Die Idee ist folgende: Schreiben Sie eine Funktion, um die Zeitspanne vom aktuellen Datum (zum Zeitpunkt des Aufrufs der Funktion) bis zu einem als Argument angegebenen Datum zu drucken.
Annahmen:
- Das Eingabedatum wird in Zukunft immer morgen oder später sein.
- Das Eingabedatum wird in Zukunft niemals mehr als 10 Jahre betragen.
Regeln:
- Die Ausgabe muss in diesem Format erfolgen: "[z Jahr (e)], [x Monat (e)], y Tag (e) bis -Input Date-"
- Der Ausgabezeitrahmen (Tag / Monat / Jahr) muss korrekt pluralisiert werden. dh
1 month
nicht1 months
- Die Eingabe kann in welch auch immer sein Datumsformat Sie bevorzugen (3/15/12 - 15. März 2012 - 2012.03.15).
Beispiel: Angenommen, das Programm wird am 15. März 2012 ausgeführt:
- Eingabedatum von
3/20/12
=5 days until 3/20/12
- NICHT Eingabedatum von
4/16/12
=1 month, 1 days until 3/20/12
- Eingabedatum von
2012.04.20
=1 month, 5 days until 2012.04.20
- NICHT Eingabedatum von
2012.04.20
=36 days until 2012.04.20
- Eingabedatum von
10/31/17
=5 years, 7 months, 16 days until 10/31/17
- Eingabedatum von
3/15/13
=1 year until 3/15/13
Dies ist Code Golf, also gewinnt der Code mit der kürzesten Länge.
Ich nehme an, um eine Frist zu haben, werde ich eine Antwort auswählen auf:
23. März 2012!
(Dies ist meine erste CG-Frage, daher werde ich gerne alle Fragenfehler meinerseits korrigieren!)
now until <input time>
pnow-<input time>
Antworten:
R, 99 Zeichen
Ich weiß, es ist eine Art Betrug, aber bei R dreht sich alles um seine Pakete und Lubridate ist für diese Art von Aufgaben so praktisch!
Verwendung:
quelle
PHP, 315 Zeichen
Verwendung:
Nimmt Daten in einem
dd/mm/yyyy
Format. Ich habe Griffins Monatslängenberechnung ( wieder ) verwendet, obwohl ich zusätzliche Klammern einfügen musste, damit die Priorität ordnungsgemäß funktioniert. Ich habe auch einige Zeilenumbrüche hinterlassen, um das Lesen zu erleichtern.quelle
Rubin (213)
nimmt Daten in jedem Format
Date.parse
akzeptiert. Versuchte nur mityyyy-mm-dd
Um auch Wochen zu bekommen, füge hinzu:
und
[0,'week'],
(zwischen Monat und Tag). Tage werden dann immer sein< 7
quelle
uninitialized constant Object::Date (NameError)
. Ich denke, Sie verwenden die Rails-Date
KlasseVBA:
766631 ZeichenVielen Dank an mellamokb für die Verkürzung der String-Erstellung und
IIf
.Ich weiß, dass es sich
VBA
definitiv nicht für das Code-Golfen sowie für einige andere Sprachen eignet, aber ich bin gut darin (kein Experte). :-)Das war eine lustige Übung für mich!
quelle
If y > 0 Then a = y & " year,":If y > 1 Then a = y & " years,"
zu kombinieren :) Zum Beispiel könnte zusammen kombiniert werdena = y & " year" & Left("s", y - 1) & ","
1 year
,1 month
,1 day
. Ich habe dies in der Antwort korrigiert. Es machte tatsächlich für kürzeren Code!If v < w Then d = w - v:If v = w Then d = 0
,If v <= w Then d = w - v
um weitere 20 Zeichen zu sparen. Ich werde die Antwort aktualisieren, wenn ich eine größere Änderung zu posten habe.JavaScript (ES6), 125 Byte
Da die Antwort von Paolo eine externe Bibliothek verwendet hat, werde ich dasselbe tun. Bei Node.js dreht sich alles um NPM-Pakete und moment + HumanizeDuration ist für diese Aufgabe so praktisch!
Knotenumgebungen
Browser-Umgebung
Da die Bibliotheken globale Variablen deklarieren, ist sie tatsächlich etwas kürzer (102 Byte). Es ist nicht klar, ob ich die zum Laden von JavaScript von Drittanbietern erforderlichen Skript-Tags einfügen muss, daher werde ich den Knoten offiziell zählen.
CoffeeScript, auch 125 Bytes
quelle
PHP, 151 Zeichen
quelle
echo date_diff(new DateTime(),new DateTime($argv[1]))->format('%yyears, %mmonths, %a days');
Es ist 92 Zeichen lang, wenn es über die Befehlszeile aufgerufen wird.