我有一个网页,有三个下拉菜单,分别是日、月和年。如果我使用JavaScript Date构造函数接受数字,那么我得到一个Date对象为我的当前时区:

new Date(xiYear, xiMonth, xiDate)

给出正确的日期,但由于夏令时,它认为日期是GMT+01:00。

这里的问题是,然后我将这个日期传递给一个Ajax方法,当日期在服务器上被反序列化时,它已经转换为GMT,因此失去了一个小时,这将一天往回移动了一个小时。 现在我可以将日、月和年分别传递到Ajax方法中,但似乎应该有更好的方法。

接受的答案为我指明了正确的方向,但是仅仅使用setUTCHours()本身就改变了:

Apr 5th 00:00 GMT+01:00 

to

Apr 4th 23:00 GMT+01:00

然后,我还必须设置UTC日期、月份和年份

Apr 5th 01:00 GMT+01:00

这正是我想要的


当前回答

getTimeZoneOffset为UTC + z的减号。

var d = new Date(xiYear, xiMonth, xiDate);
if(d.getTimezoneOffset() > 0){
    d.setTime( d.getTime() + d.getTimezoneOffset()*60*1000 );
}

其他回答

const date = new Date("2020-12-16 17:45:00 UTC");

工作很好。

下面是一个函数,你可以用它来实现一个date对象:

const getUTCDate = (date) => {
    const d = new Date(date);
    const utcDate = new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());
    return utcDate;
}

const string = '1930-08-12T00:00:00.000000Z';

const utcDate = getUTCDate(string);

// returns Tue Aug 12 1930 00:00:00 GMT-0800 (Pacific Daylight Time)

我知道这很旧,但如果有用的话,你可以用moment和moment时区。如果你还没见过,请看一看。

http://momentjs.com/timezone/

http://momentjs.com/

两个非常方便的时间操作库。

我脑子疼。 如何获得当前相同的日期与时区,如在服务器与WORDPRESS到js。

var dnow = new Date();
dnow = dnow.getTime() + dnow.getTimezoneOffset()*60*1000 + <?= get_option( 'gmt_offset' ) ?> * 60*60*1000;

首先,我们需要得到当前的日期。然后我们需要删除用户时区偏移。然后我们从WordPress选项页面添加gmt偏移量。

这对我很管用。但不确定这是不是一个好主意。

var myDate = new Date(); 控制台。(“myDate:日志”,myDate);// myDate:“2018- 04-04-01:09 9:38,112z。” var偏移= +5;如果timeZone是5 var MyDateWithOffset = new Date(最新消息) 控制台。(“MyDateWithOffset:日志”,MyDateWithOffset);// myDateWithOffset:“2018- 04-03-020:09:38,000z”