Vytvořte datum s nastaveným časovým pásmem bez použití řetězcové reprezentace

Mám webovou stránku se třemi rozevíracími seznamy pro den, měsíc a rok. Pokud použiji JavaScript Date konstruktor, který bere čísla, pak dostanu Date objekt pro mé aktuální časové pásmo:

new Date(xiYear, xiMonth, xiDate)

Uveďte správné datum, ale domnívá se, že datum je GMT+01:00 kvůli letnímu času.

Problém je v tom, že pak předám toto Date na metodu Ajax, a když je datum deserializováno na serveru, bylo převedeno na GMT, a tak přišla o hodinu, která posune den o jednu zpět. Nyní jsem mohl jednoduše předat den, měsíc a rok jednotlivě do metody Ajax, ale zdá se, že by měl existovat lepší způsob.

Přijatá odpověď mě nasměrovala správným směrem, ale pouze pomocí setUTCHours() samo o sobě změněno:

Apr 5th 00:00 GMT+01:00 

do

Apr 4th 23:00 GMT+01:00

Potom jsem také musel nastavit datum UTC, měsíc a rok, aby skončilo s

Apr 5th 01:00 GMT+01:00

což jsem chtěl.

Odpověď

pomocí .setUTCHours() bylo by možné skutečně nastavit data v UTC čase, což by vám umožnilo používat UTC časy v celém systému.

Nemůžete jej však nastavit pomocí UTC v konstruktoru, pokud nezadáte řetězec data.

Pomocí new Date(Date.UTC(year, month, day, hour, minute, second)) můžete vytvořit objekt Date z určitého času UTC.

Příklad