Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将日期对象转换为不同时区的同一时间,并获取其时间戳_Javascript_Date_Timezone_Timestamp_Datetime Format - Fatal编程技术网

Javascript 将日期对象转换为不同时区的同一时间,并获取其时间戳

Javascript 将日期对象转换为不同时区的同一时间,并获取其时间戳,javascript,date,timezone,timestamp,datetime-format,Javascript,Date,Timezone,Timestamp,Datetime Format,我有一个GMT+1日期对象2017年2月1日星期三00:00:00 GMT+0100(CET)。我想将此对象转换为日期完全相同的GMT+0: 格林尼治标准时间:2017年2月1日00:00:00格林尼治标准时间 当我解析我的对象时,它返回的时间戳等于2017年1月31日星期二23:00:00 GMT 如何将我的GMT+1日期对象转换为获取等于GMT+0中相同日期的时间戳?我试图使用moment.js,但我无法处理 @编辑 带解释的代码 //用户选择2017年2月1日,但由于组件使用GMT+1

我有一个GMT+1日期对象
2017年2月1日星期三00:00:00 GMT+0100(CET)
。我想将此对象转换为日期完全相同的GMT+0:

格林尼治标准时间:2017年2月1日00:00:00格林尼治标准时间

当我解析我的对象时,它返回的时间戳等于2017年1月31日星期二23:00:00 GMT

如何将我的GMT+1日期对象转换为获取等于GMT+0中相同日期的时间戳?我试图使用moment.js,但我无法处理

@编辑

带解释的代码

//用户选择2017年2月1日,但由于组件使用GMT+1
const userChoice=新日期(2017年1月1日0月0日)
//后端与时间戳一起工作,我解析userChoice
const timestamp=时刻(userChoice).valueOf()的值
//给我的时间戳等于2016年12月31日
log(timestamp,time(timestamp).utc()格式('DD/MM/YYYY hh:MM:ss Z'))
//但我希望与用户选择的日期相同,但在特定的(GMT+0)时区中

好的,我找到了解决方案。我们将调用date对象“mod”,它为我们提供2017年2月1日星期三00:00:00 GMT+0100

const mod=新日期(148590360000)

现在,我们将创建一个变量,该变量以UTC为单位,为我们提供完全相同的时间(例如,天、小时等)的时间戳

const utc=Date.utc(mod.getFullYear()、mod.getMonth()、mod.getDate()、mod.getHours()、mod.getMinutes()、mod.getSeconds())
如果我们想检查时间戳是否正确,我们可以简单地用这个时间戳创建新的日期,并将其记录在console.log中


console.log(148590720000)//2017年2月1日星期三01:00:00 GMT+0100 2017年2月1日星期三00:00:00 GMT+0000

好的,我找到了解决方案。我们将调用date对象“mod”,它为我们提供2017年2月1日星期三00:00:00 GMT+0100

const mod=新日期(148590360000)

现在,我们将创建一个变量,该变量以UTC为单位,为我们提供完全相同的时间(例如,天、小时等)的时间戳

const utc=Date.utc(mod.getFullYear()、mod.getMonth()、mod.getDate()、mod.getHours()、mod.getMinutes()、mod.getSeconds())
如果我们想检查时间戳是否正确,我们可以简单地用这个时间戳创建新的日期,并将其记录在console.log中


console.log(148590720000)//2017年2月1日星期三01:00:00 GMT+0100 2017年2月1日星期三00:00:00 GMT+0000

我不清楚您想做什么。查看您的代码:

// User chooses 1st Feb 2017, but since components works with GMT +1
const userChoice = new Date(2017, 01, 01, 0, 0, 0)
这将在主机系统时区中创建一个日期对象,相当于2017年2月1日开始时的午夜

// And backend works with timestamps I parse userChoice
const timestamp = moment(userChoice).valueOf()
您不是在“解析”userChoice,它是一个日期对象。您得到的是时间值,它是自1970-01-01T00:00:00Z以来以毫秒为单位的偏移量,相当于
userChoice.getTIme()

不,没有。原来的日期是2月1日,按时区最多只能移动一天。对于设置为格林威治以西时区的主机,创建日期时的时区调整意味着UTC日期为2月1日,但对于东部主机,UTC日期为1月31日

// But I want to have the same date as user chooses, but in a specific (GMT+0) timezone
要为特定UTC日期创建日期,请使用UTC方法。或者,如果您有一个日期对象,则可以通过主体偏移量对其进行调整:

//根据主机偏移量创建2017年2月1日的日期
var d=新日期(2017年1月1日);
//为同一日期创建UTC日期
var u=新日期(UTC日期(2017,1,1));
log('Local:'+d.toISOString());
console.log('UTC:'+u.toISOString());
//根据时区偏移量调整d
d、 setMinutes(d.getMinutes()-d.getTimezoneOffset())

console.log('Adjusted:'+d.toISOString())我不清楚你想做什么。查看您的代码:

// User chooses 1st Feb 2017, but since components works with GMT +1
const userChoice = new Date(2017, 01, 01, 0, 0, 0)
这将在主机系统时区中创建一个日期对象,相当于2017年2月1日开始时的午夜

// And backend works with timestamps I parse userChoice
const timestamp = moment(userChoice).valueOf()
您不是在“解析”userChoice,它是一个日期对象。您得到的是时间值,它是自1970-01-01T00:00:00Z以来以毫秒为单位的偏移量,相当于
userChoice.getTIme()

不,没有。原来的日期是2月1日,按时区最多只能移动一天。对于设置为格林威治以西时区的主机,创建日期时的时区调整意味着UTC日期为2月1日,但对于东部主机,UTC日期为1月31日

// But I want to have the same date as user chooses, but in a specific (GMT+0) timezone
要为特定UTC日期创建日期,请使用UTC方法。或者,如果您有一个日期对象,则可以通过主体偏移量对其进行调整:

//根据主机偏移量创建2017年2月1日的日期
var d=新日期(2017年1月1日);
//为同一日期创建UTC日期
var u=新日期(UTC日期(2017,1,1));
log('Local:'+d.toISOString());
console.log('UTC:'+u.toISOString());
//根据时区偏移量调整d
d、 setMinutes(d.getMinutes()-d.getTimezoneOffset())

console.log('Adjusted:'+d.toISOString())date对象无法转换为不同的时区,因为它只保留自1970年1月1日以来经过的毫秒数,并且对世界各地都是相同的

但是,日期对象可以基于时区偏移值在不同的时区(也称为本地时间)进行解释

您甚至不需要知道时区偏移的固定值; 让计算机为您处理好它,因为它还将包括不同地点和正确时间之间的夏季夏令时更改。 你所需要知道的只是时区描述,可以在网站上查到

let now=new Date(),
当前=Intl.DateTimeFormat().resolvedOptions().timeZone,
分区=[当前,'欧洲/伦敦','亚洲/东京'];
区域。forEach((z)=>{
console.log(“在“+z+”中的时间是”+
现在,tolocalesting(“en-ES,{timeZone:z}))

});日期对象不能转换为不同的时区,因为它只保留毫秒数