Blisko - należy użyć getUTCHours, getUTCMinutesi getUTCSeconds. W przeciwnym razie nadasz zachowanie lokalnej strefy czasowej, które przyniesie różne wyniki w zależności od strefy czasowej i dnia, w którym wybierzesz - ze względu na czas letni.
Matt Johnson-Pint
14
Sugeruję użycie moment.jsdo tego. W chwili.js możesz:
var localTime = moment().format('YYYY-MM-DD'); // store localTimevar proposedDate = localTime + "T00:00:00.000Z";
teraz, gdy masz już odpowiedni format na jakiś czas, przeanalizuj go, jeśli jest prawidłowy:
var isValidDate = moment(proposedDate).isValid();
// returns true if valid and false if it is not.
aby uzyskać części czasu, możesz zrobić coś takiego:
var momentDate = moment(proposedDate)
var hour = momentDate.hours();
var minutes = momentDate.minutes();
var seconds = momentDate.seconds();
// or you can use `.format`:console.log(momentDate.format("YYYY-MM-DD hh:mm:ss A Z"));
Powinieneś być w stanie przeanalizować to bezpośrednio w konstruktorze momentu z odpowiednim ciągiem formatu. (moment przyjmie aktualną datę, jeśli nie jest to część wartości). Możesz również rozważyć moment.utc(...), czy wynikowa wartość jest w tej samej strefie UTC, co oryginalna wartość.
Matt Johnson-Pint
4
Jak jedna osoba mogła już zasugerować,
Przekazałem ciąg daty ISO 8601 bezpośrednio do chwili, tak ...
T
oznacza „czas” i zwykle oddziela datę od składnika czasu.Z
oznacza, że wartość jest podana w UTCOdpowiedzi:
Jest to część reprezentacji daty ISO-8601 . Jest niekompletna, ponieważ pełna reprezentacja daty w tym wzorze powinna również zawierać datę:
2015-03-04T00:00:00.000Z //Complete ISO-8601 date
Jeśli spróbujesz przeanalizować tę datę tak, jak jest, pojawi się
Invalid Date
błąd:new Date('T00:00:00.000Z'); // Invalid Date
Wydaje mi się, że sposobem na przeanalizowanie znacznika czasu w tym formacie jest połączenie z dowolną datą
new Date('2015-03-04T00:00:00.000Z'); // Valid Date
Następnie możesz wyodrębnić tylko żądaną część (część z sygnaturą czasową)
var d = new Date('2015-03-04T00:00:00.000Z'); console.log(d.getUTCHours()); // Hours console.log(d.getUTCMinutes()); console.log(d.getUTCSeconds());
źródło
getUTCHours
,getUTCMinutes
igetUTCSeconds
. W przeciwnym razie nadasz zachowanie lokalnej strefy czasowej, które przyniesie różne wyniki w zależności od strefy czasowej i dnia, w którym wybierzesz - ze względu na czas letni.Sugeruję użycie
moment.js
do tego. W chwili.js możesz:var localTime = moment().format('YYYY-MM-DD'); // store localTime var proposedDate = localTime + "T00:00:00.000Z";
teraz, gdy masz już odpowiedni format na jakiś czas, przeanalizuj go, jeśli jest prawidłowy:
var isValidDate = moment(proposedDate).isValid(); // returns true if valid and false if it is not.
aby uzyskać części czasu, możesz zrobić coś takiego:
var momentDate = moment(proposedDate) var hour = momentDate.hours(); var minutes = momentDate.minutes(); var seconds = momentDate.seconds(); // or you can use `.format`: console.log(momentDate.format("YYYY-MM-DD hh:mm:ss A Z"));
Więcej informacji o momentjs http://momentjs.com/
źródło
moment.utc(...)
, czy wynikowa wartość jest w tej samej strefie UTC, co oryginalna wartość.Jak jedna osoba mogła już zasugerować,
Przekazałem ciąg daty ISO 8601 bezpośrednio do chwili, tak ...
`moment.utc('2019-11-03T05:00:00.000Z').format('MM/DD/YYYY')`
lub
`moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')`
każde z tych rozwiązań da ten sam rezultat.
`console.log(moment('2019-11-03T05:00:00.000Z').utc().format('MM/DD/YYYY')) // 11/3/2019`
źródło
Użyj DateTimeFormatter
ISO_DATE_TIME = DateTimeFormatter.ISO_DATE_TIME;
zamiastDateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss")
lub dowolnego wzorcaTo rozwiązało mój problem poniżej
źródło