Chodzi o to: Napisz funkcję, która wydrukuje czas od daty obecnej / dzisiejszej (w momencie wywołania funkcji) do daty podanej jako argument.
Założenia:
- Data wprowadzenia będzie zawsze jutro lub później, w przyszłości.
- Data wejścia nigdy nie będzie dłuższa niż 10 lat w przyszłości.
Zasady:
- Dane wyjściowe muszą być w tym formacie: „[z roku (lat)], [x miesięcy (miesięcy)], y dni (dni) do -Data wejścia-”
- Wyjściowe ramy czasowe (dzień / miesiąc / rok) muszą być poprawnie pluralizowane. tzn.
1 month
nie1 months
- Wejście może być w dowolny format daty ty wolisz (3/15/12 - 15 marca 2012 - 2012.03.15).
Przykład: Zakładając, że program zostanie uruchomiony 15 marca 2012 r .:
- Data wprowadzenia
3/20/12
=5 days until 3/20/12
- NIE Wprowadź datę
4/16/12
=1 month, 1 days until 3/20/12
- Data wprowadzenia
2012.04.20
=1 month, 5 days until 2012.04.20
- NIE Wprowadź datę
2012.04.20
=36 days until 2012.04.20
- Data wprowadzenia
10/31/17
=5 years, 7 months, 16 days until 10/31/17
- Data wprowadzenia
3/15/13
=1 year until 3/15/13
To jest kod golfowy, więc wygrywa kod o najkrótszej długości.
Podejrzewam, że ze względu na termin wybiorę odpowiedź na:
23 marca 2012!
(To jest moje pierwsze pytanie CG, więc z przyjemnością poprawię błędy z mojej strony!)
now until <input time>
pnow-<input time>
Odpowiedzi:
R, 99 znaków
Wiem, że to trochę oszustwo, ale R dotyczy wszystkich swoich pakietów, a smarowanie jest tak wygodne dla tego rodzaju zadań!
Stosowanie:
źródło
PHP, 315 znaków
Stosowanie:
Przyjmuje daty w
dd/mm/yyyy
formacie. Użyłem kalkulacji długości miesiąca Griffina ( ponownie ), chociaż musiałem wstawić w nim dodatkowe nawiasy, aby pierwszeństwo działało poprawnie. Zostawiłem też kilka przełamań linii, aby ułatwić sobie czytanie.źródło
Rubin (213)
przyjmuje daty w dowolnym formacie
Date.parse
akceptuje. Próbowałem właśnie zyyyy-mm-dd
aby uzyskać tygodnie, dodaj:
oraz
[0,'week'],
(między miesiącem a dniem). zawsze będą dni< 7
źródło
uninitialized constant Object::Date (NameError)
... Myślę, że używaszDate
klasy RailsVBA:
766631 znakówDzięki mellamokb za pomoc w skróceniu tworzenia łańcucha i
IIf
.Wiem, że
VBA
zdecydowanie nie nadaje się do gry w golfa, jak również w niektórych innych językach, ale w tym jestem dobry (nie jestem ekspertem). :-)To było dla mnie zabawne ćwiczenie!
źródło
If y > 0 Then a = y & " year,":If y > 1 Then a = y & " years,"
można je połączyć za = y & " year" & Left("s", y - 1) & ","
1 year
,1 month
,1 day
. Poprawiłem to w odpowiedzi. To rzeczywiście stworzyło krótszy kod!If v < w Then d = w - v:If v = w Then d = 0
, abyIf v <= w Then d = w - v
dla oszczędności dodatkowego 20 znaków. Zaktualizuję odpowiedź, jeśli mam bardziej znaczącą zmianę w poście.JavaScript (ES6), 125 bajtów
Ponieważ odpowiedź Paolo wykorzystała bibliotekę zewnętrzną, zrobię to samo. W Node.js chodzi o pakiety NPM, a moment + HumanizeDuration jest tak wygodny dla tego zadania!
Środowiska węzłowe
Środowisko przeglądarki
Ponieważ biblioteki deklarują zmienne globalne, w rzeczywistości są nieco krótsze (102 bajty). Nie jest jasne, czy muszę dołączyć tagi skryptowe wymagane do załadowania w JavaScript innej firmy, więc oficjalnie policzę jeden z węzłów.
CoffeeScript, również 125 bajtów
źródło
PHP, 151 znaków
źródło
echo date_diff(new DateTime(),new DateTime($argv[1]))->format('%yyears, %mmonths, %a days');
92 znaki długości, gdy jest wywoływany z wiersza poleceń.