Obecnie próbuję wyświetlić czas użytkownika bez wyświetlania sekund. Czy istnieje sposób, aby to zrobić za pomocą .toLocaleTimeString () JavaScript?
Robię coś takiego:
var date = new Date();
var string = date.toLocaleTimeString();
wyświetli czas użytkownika z każdą jednostką, np. obecnie wyświetla 3:39:15 PM. Czy mogę wyświetlić ten sam ciąg, bez sekund? (np. 15:39)
javascript
time
javadog36
źródło
źródło
hour: "2-digit"
nie działa dla mnie w Chrome 42 ani FF 37 ---d = new Date(1429524912495).toLocaleTimeString('en-US', {hour: '2-digit', minute: '2-digit', hour12: true})
wraca"6:15 AM"
w obu.[]
aby pominąć określone ustawienie regionalne. W ten sposób pozostaniesz przy lokalizacji użytkowników:toLocaleTimeString([], {hour: '2-digit', minute: '2-digit'}
new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit', hour12: false}); "17:08"
To działa dla mnie:
źródło
Wartość zwracana przez Date.prototype.toLocaleString jest zależna od implementacji, więc otrzymujesz to, co otrzymujesz. Możesz spróbować przeanalizować ciąg, aby usunąć sekundy, ale może on być inny w różnych przeglądarkach, więc musisz uwzględnić każdą używaną przeglądarkę.
Tworzenie własnego, jednoznacznego formatu przy użyciu metod Date nie jest trudne. Na przykład:
źródło
Z lokalizacjami:
źródło
Szukałem też rozwiązania tego problemu, oto co ostatecznie wymyśliłem:
Możesz spróbować tutaj: http://jsfiddle.net/B5Zrx/
\ u200E to jakiś znak formatujący, który widziałem w niektórych wersjach IE (jest to znak Unicode od lewej do prawej).
Zakładam, że jeśli sformatowany czas zawiera coś w rodzaju „XX: XX: XX” to musi to być czas z sekundami i usuwam ostatnią część, jeśli nie znajdę tego wzorca, nic się nie zmienia. Całkiem bezpieczne, ale istnieje ryzyko, że w dziwnych okolicznościach zostawisz kilka sekund.
Mam tylko nadzieję, że nie ma ustawień regionalnych, które zmieniłyby kolejność sformatowanych części czasu (np. Sprawiły, że ss: mm: hh). Ten znak od lewej do prawej trochę mnie denerwuje, dlatego nie usuwam znaku od prawej do lewej (\ u202E) - wolę w tym przypadku nie szukać dopasowania i zostawić w takim przypadku czas sformatowany w sekundach.
źródło
toLocaleTimeString()
zwrotów, które mogą nie być prawdziwe dla wszystkich ustawień regionalnych.Możesz spróbować tego, co działa na moje potrzeby.
lub
źródło
:
.Oto funkcja, która to zrobi, z komentarzami, które wyjaśniają:
Ponieważ, jak zauważyli inni, toLocaleTimeString () może być implementowane w różny sposób w różnych przeglądarkach, zapewnia to lepszą kontrolę.
Aby dowiedzieć się więcej o obiekcie Javascript Date, jest to dobre źródło: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
źródło
Myślę, że na pierwotne pytanie można łatwo odpowiedzieć, pozostawiając coś przeoczonego do tej pory: prosty podział na ciąg. Zwracany czas jest ciągiem tekstowym, po prostu podziel go na ogranicznik „:” i złóż ciąg w dowolny sposób. Bez wtyczek, bez skomplikowanych skryptów. i proszę bardzo:
źródło
Chociaż jest to starsze pytanie, ostatnio miałem to samo i wymyśliłem prostsze rozwiązanie, używając wyrażeń regularnych i funkcji zastępowania ciągów jako innej alternatywy (nie ma potrzeby korzystania z zewnętrznych bibliotek js ani polegania na interfejsie API internalizacji ECMAScript) :
To podejście wykorzystuje regex look-ahead do przechwycenia: ss końca łańcucha AM / PM i zastępuje część: ss spacją, zwracając resztę łańcucha nietkniętą. (Dosłownie mówi „Znajdź dwukropek z dwiema cyframi i spacją, po której następuje AM lub PM i zastąp dwukropek, dwie cyfry i część spacji tylko spacją).
To wyrażenie / podejście działa tylko w przypadku lokalizacji en-US i en-US-like. Jeśli chciałbyś uzyskać podobny wynik z, powiedzmy, brytyjskim angielskim (en-GB), który nie używa AM / PM, potrzebne jest inne wyrażenie regularne.
Opierając się na przykładowych wynikach oryginalnego pytającego, zakładam, że miały one do czynienia głównie z amerykańską publicznością i schematem czasu en-US.
źródło
Po prostu przekonwertuj datę na ciąg, a następnie połącz żądane podciągi.
źródło
toLocaleTimeString
zwraca inny ciąg w każdej przeglądarce w zależności od ustawień regionalnych. Nie możesz polegać na tych pozycjach, otrzymasz różne, prawdopodobnie błędne wyniki w przeglądarkach innych osób.