Mam Date
przedmiot Jak renderować title
fragment następującego fragmentu kodu?
<abbr title="2010-04-02T14:12:07">A couple days ago</abbr>
Mam część „względny czas w słowach” z innej biblioteki.
Próbowałem następujące:
function isoDate(msSinceEpoch) {
var d = new Date(msSinceEpoch);
return d.getUTCFullYear() + '-' + (d.getUTCMonth() + 1) + '-' + d.getUTCDate() + 'T' +
d.getUTCHours() + ':' + d.getUTCMinutes() + ':' + d.getUTCSeconds();
}
Ale to daje mi:
"2010-4-2T3:19"
javascript
datetime
iso8601
James A. Rosen
źródło
źródło
new Date("xx").toISOString()
tworzyNaN-NaN-NaNTNaN:NaN:NaN.NZ
Natywna implementacja zgłasza RangeException.Zobacz ostatni przykład na stronie https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference:Global_Objects:Date :
źródło
<abbr title="2010-04-02T14:12:07">
) nie ma strefy czasowej. Może chcieli czasu lokalnego, co miałoby sens dla ciągu czasu interfejsu użytkownika?Prawie każda metoda ISO w sieci upuszcza informacje o strefie czasowej, stosując konwersję do czasu ulu „Z” (UTC) przed wyprowadzeniem ciągu. Natywna funkcja .toISOString () przeglądarki również usuwa informacje o strefie czasowej.
To odrzuca cenne informacje, ponieważ serwer lub odbiorca mogą zawsze przekonwertować pełną datę ISO na czas Zulu lub dowolną strefę czasową, której potrzebuje, jednocześnie otrzymując informacje o strefie czasowej nadawcy.
Najlepszym rozwiązaniem, z jakim się zetknąłem, jest użycie biblioteki javascript Moment.js i użycie następującego kodu:
Aby uzyskać bieżący czas ISO z informacjami o strefie czasowej i milisekundach
Aby uzyskać czas ISO natywnego obiektu JavaScript Date z informacjami o strefie czasowej, ale bez milisekund
Można to połączyć z Date.js, aby uzyskać funkcje takie jak Date.today (), których wynik można następnie przekazać do momentu.
Tak sformatowany ciąg daty jest zgodny z JSON i dobrze nadaje się do zapisania w bazie danych. Python i C # wydają się to lubić.
źródło
moment(new Date()).format()
. „Począwszy od wersji 1.5.0, moment wywołania formatu # bez formatu będzie domyślnie ustawiony na ... format ISO8601YYYY-MM-DDTHH:mm:ssZ
”. Dokument: przewiń w górę od momentjs.com/docs/#/displaying/fromnowmoment().format()
"2015-03-04T17:16:05+03:00"
(new Date()).toISOString()
"2015-03-04T14:16:24.555Z"
Pytanie dotyczyło formatu ISO ze zmniejszoną precyzją. Voila:
Zakładając, że końcowy Z jest pożądany, w przeciwnym razie po prostu pomiń.
źródło
Najkrótszy, ale nie obsługiwany przez Internet Explorer 8 i wcześniejsze:
źródło
Jeśli nie potrzebujesz obsługi IE7, to świetny, zwięzły hack:
źródło
toJSON
zamiast tego użyj metody date .JSON.stringify
i tak używa go pod przykryciem.JSON
obiekt, ale nie w niektórych trybach zgodności. Zobacz stackoverflow.com/questions/4715373/….toISOString()
?Zwykle nie chcę wyświetlać daty UTC, ponieważ klienci nie lubią konwersji w głowie. Aby wyświetlić lokalną datę ISO, używam funkcji:
Powyższa funkcja pomija informację o przesunięciu strefy czasowej (z wyjątkiem sytuacji, gdy czasem lokalnym jest UTC), więc używam funkcji poniżej, aby pokazać lokalne przesunięcie w jednym miejscu. Możesz również dołączyć jego wynik do wyników powyższej funkcji, jeśli chcesz wyświetlać przesunięcie za każdym razem:
toLocalIsoString
wykorzystujepad
. W razie potrzeby działa jak prawie każda funkcja padu, ale ze względu na kompletność używam tego:źródło
Po „T” brakuje „+”
powinien to zrobić.
W przypadku zer wiodących możesz użyć tego stąd :
Używając tego w ten sposób:
źródło
źródło
Problem z toISOString polega na tym, że podaje datetime tylko jako „Z”.
ISO-8601 definiuje również datę i godzinę z różnicą stref czasowych w godzinach i minutach, w postaciach takich jak 2016-07-16T19: 20: 30 + 5: 30 (kiedy strefa czasowa jest przed UTC) i 2016-07-16T19: 20: 30-01 : 00 (gdy strefa czasowa znajduje się za UTC).
Nie sądzę, że dobrym pomysłem jest użycie innej wtyczki, moment.js do tak małego zadania, zwłaszcza gdy można go uzyskać za pomocą kilku linii kodu.
Po przesunięciu strefy czasowej w godzinach i minutach możesz dołączyć do ciągu datetime.
Napisałem na nim post na blogu: http://usefulangle.com/post/30/javascript-get-date-time-with-offset-hours-minutes
źródło
Chciałbym użyć tego małego rozszerzenia do
Date
- http://blog.stevenlevithan.com/archives/date-time-formatźródło
Byłem w stanie uzyskać poniżej danych wyjściowych przy bardzo mniejszym kodzie.
Wynik:
źródło
Znalazłem gdzieś podstawy przepełnienia stosu (uważam, że było to częścią innego golfowego kodu Stack Exchange) i poprawiłem go, aby działał również w przeglądarce Internet Explorer 10 lub wcześniejszej. Jest brzydka, ale wykonuje zadanie.
źródło
Aby rozszerzyć świetną i zwięzłą odpowiedź Seana za pomocą cukru i nowoczesnej składni:
Następnie np.
źródło