Od jakiegoś czasu walczę z tym. Próbuję przekonwertować epokę na obiekt daty. Epoka jest wysyłana do mnie w UTC. Ilekroć miniesz new Date()
epokę, zakłada się, że to epoka lokalna. Próbowałem utworzyć obiekt UTC, a następnie setTime()
dostosować go do właściwej epoki, ale jedyną metodą, która wydaje się przydatna, jest to, że toUTCString()
łańcuchy mi nie pomagają. Jeśli przekażę ten ciąg w nową datę, powinien zauważyć, że jest to UTC, ale tak nie jest.
new Date( new Date().toUTCString() ).toLocaleString()
Moja kolejna próba polegała na znalezieniu różnicy między bieżącą epoką lokalną a obecną epoką UTC, ale ja też nie byłem w stanie jej uzyskać.
new Date( new Date().toUTCString() ).getTime() - new Date().getTime()
Daje mi to bardzo małe różnice, poniżej 1000, co jest w milisekundach.
Jakieś sugestie?
javascript
date
utc
epoch
Shane Reustle
źródło
źródło
Odpowiedzi:
Myślę, że mam prostsze rozwiązanie - ustaw datę początkową epoki i dodaj jednostki UTC. Załóżmy, że masz zapisaną epokę var UTC w sekundach. Jak o
1234567890
. Aby przekonwertować to na właściwą datę w lokalnej strefie czasowej:d
jest teraz ustawioną datą (w mojej strefie czasowej)Fri Feb 13 2009 18:31:30 GMT-0500 (EST)
źródło
var d = new Date(utcSeconds * 1000)
Powinien więc dać ten sam wynik.var d = new Date(1234567890000)
zwraca ten sam wynikTo proste,
new Date()
zajmuje tylko milisekundy, npźródło
const d = new Date(epoch * 1000)
.I tylko dla dzienników zrobiłem to przy użyciu biblioteki Moment.js , której i tak używałem do formatowania.
źródło
Czas epoki jest wyrażony w sekundach od 1 stycznia 1970 r.
date.getTime()
Zwraca milisekundy od 1 stycznia 1970 r., Więc .. jeśli masz znacznik czasu epoki, przekonwertuj go na znacznik czasu javascript, mnożąc przez 1000.źródło
źródło
Aby przekonwertować bieżący czas epoki w [ms] na czas 24-godzinny. Może być konieczne określenie opcji wyłączenia formatu 12-godzinnego .
lub jako JS:
Uwaga: użycie
en-GB
tutaj jest tylko (losowym) wyborem miejsca w formacie 24-godzinnym, nie jest to twoja strefa czasowa!źródło
d/m/yyyy
czy to jestm/d/yyyy
? Prawo (najbardziej logiczny) sposób wyświetlania to powinno być:yyyy-mm-dd
. Jacyś chętni?Czas Epoki (tj. Czas Epoki Uniksa) jest prawie zawsze liczbą sekund , które upłynęły od 1 stycznia 1970 r. 00:00:00 (czasu UTC), a nie liczbą milisekund, które sugerują niektóre odpowiedzi tutaj.
https://en.wikipedia.org/wiki/Unix_time
Dlatego jeśli otrzymałeś wartość czasu Epoki Uniksowej, prawdopodobnie będzie to za kilka sekund i będzie wyglądało podobnie
1547035195
. Jeśli chcesz, aby ten człowiek był czytelny w JavaScript, musisz przekonwertować wartość na milisekundy i przekazać tę wartość doDate(value)
konstruktora, np .:Nie musisz robić
d.setUTCMilliseconds(0)
kroku w zaakceptowanej odpowiedzi, ponieważDate(value)
konstruktor JavaScript przyjmuje wartość UTC w milisekundach (nie w czasie lokalnym).https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax
Należy również pamiętać, że należy unikać używania
Date(...)
konstruktora, który przyjmuje ciąg reprezentujący datę i godzinę, nie jest to zalecane (patrz link powyżej).źródło
Czy chcesz tylko przekonwertować ciąg UTC na ciąg „lokalny”? Mógłbyś:
źródło
Dodatek do powyższej odpowiedzi @djechlin
konwertuje czas EPOCH na datę czytelną dla człowieka. Tylko nie zapomnij, że ten rodzaj czasu EPOCH musi być liczbą całkowitą.
źródło
Najprostszym rozwiązaniem, jakie znalazłem, jest:
Zauważ, że nie ma to
* 1000
na końcunew Date(timestamp)
oświadczenia, ponieważ to (w każdym razie dla mnie!) Zawsze wydaje się podawać niewłaściwą datę, tj. Zamiast podawać rok 2019, podaje rok jako 51015, więc pamiętaj o tym.źródło
Jeśli wolisz rozstrzygać konwersje znaczników czasu i dat z UTC i czasu lokalnego bez bibliotek takich jak moment.js, spójrz na opcję poniżej.
W przypadku aplikacji korzystających ze znaczników czasu UTC może być konieczne wyświetlenie daty w przeglądarce, biorąc pod uwagę lokalną strefę czasową i czas letni, jeśli dotyczy. Edycja daty, która ma inny czas letni, mimo że w tej samej strefie czasowej może być trudna.
Poniższe rozszerzenia
Number
iDate
pozwalają wyświetlać i uzyskiwać daty w strefie czasowej znaczników czasu. Załóżmy na przykład, że jesteś w Vancouver, jeśli edytujesz datę w lipcu lub w grudniu, może to oznaczać, że edytujesz datę w PST lub PDT.Zalecam sprawdzenie fragmentu kodu poniżej, aby przetestować to rozwiązanie.
Konwersje z milisekund
Konwersje z dat
Stosowanie
Przekonaj się sam
Pokaż fragment kodu
źródło
EDYTOWAĆ
EDYCJA naprawiona
źródło
Biorąc pod uwagę, masz
epoch_time
dostępne,źródło
var myDate = new Date( your epoch date *1000);
źródło - https://www.epochconverter.com/programming/#javascript
źródło
@Amjad, dobry pomysł, ale lepszym rozwiązaniem byłoby:
źródło
Najpierw przekonwertuj go na String, a następnie zamień tekst strefy czasowej.
źródło