moment.js - konwertowanie czasu lokalnego do UTC

1

Jakiś czas temu zbudowałem kalendarz z zbudowany na bibliotece moment.js. Problem w tym, jeśli mamy ustawioną strefę czasową UTC -8, przykładowo, to każdy dzień przesuwa się o jeden względem godziny 00:00 w UTC. Wtedy początkowy dzień miesiąca staje się ostatnim dniem poprzedniego z godziną 16.

Niby nic prostszego w tej sytuacji się zrobić nie da, tj. skonwertować startową datę lokalną na UTC. I tutaj zaczynają się dziać niezrozumiałe dla mnie cuda:}

let start = moment.utc(this.model.date).clone();
```

Po wykonaniu takiej komendy nasza początkowa data powinna zamienić się na aktualną w formacie UTC, jednak w miejsce jej prywatnych zmiennych pojawiają się `_i: "2019-01-01 00:00:00+00:00"` oraz `_d: Mon Dec 31 2018 17:00:00 GMT-0700 (czas górski standardowy)`. Znalazłem taki temat na forum: https://stackoverflow.com/questions/29114824/moment-js-convert-local-time-to-utc-time-does-work, gdzie jedna z osób napisała, że po samym skonwertowaniu czasu data jeszcze się nie zmienia, mimo że prywatna zmienna `_isUtc` jest ustawiona na `true`. Ta się nie ustawi, dopóki nie wywoła się na niej `format()`. Więc ktoś zaproponował takie o to rozwiązanie:

```javascript
var localDateString = '24/04/2019';
var localDateStringFormat = 'DD/MM/YYYY';

var utcMoment = moment.utc(moment(localDateString, localDateStringFormat ).utc().format('YYYY-MM-DD HH:mm:ssZ'))
```

które najpierw konwertuje datę do UTC, potem ją formatuje, następnie z powrotem konwertując na UTC, co wygląda kosmicznie, mając na uwadze, że biblioteka przecież ma ułatwiać pracę z datami:]. Mało tego jednak - nie działa. Ma ktoś pomysł, jak poprawnie to skonwertować, operując wcześniej na lokalnym czasie? Wierzę, że istnieje jakieś naprawdę proste rozwiązanie.
0

Podbijam, prosząc jakąś dobrą duszę o pomoc

0

To jest zgroza... Dołączam się i żądam jednego działającego rozwiązania, zawsze...

0

Ale co cię obchodzi wewnętrzna reprezentacja daty w obiekcie Moment? To pola prywatne, nie powinieneś na nie zwracać uwagi. Co ci konkretnie nie działa?

var utcMoment = moment.utc(moment(localDateString, localDateStringFormat ).utc().format('YYYY-MM-DD HH:mm:ssZ'))

Co tu chcesz osiągnąć? Co jest nie tak z taki kodem:

const localDateString = '24/04/2019';
const localDateStringFormat = 'DD/MM/YYYY';

const localDate = moment(localDateString, localDateStringFormat)
const utcDate = moment.utc(localDate)
  
console.log('local:', localDate.format('YYYY-MM-DD HH:mm:ssZ'))
console.log('utc:', utcDate.format('YYYY-MM-DD HH:mm:ssZ'))

?

Imo działa prawidłowo - dla UTC+02 dostaję:

local: 2019-04-24 00:00:00+02:00
utc: 2019-04-23 22:00:00+00:00

1 użytkowników online, w tym zalogowanych: 0, gości: 1