我有一个GMT + 1日期对象Wed Feb 01 2017 00:00:00 GMT+0100 (CET)
。我想将此对象转换为格式相同的GMT + 0:
GMT:2017年2月1日00:00:00 GMT;
当我解析我的对象时,它返回的时间戳等于Tue, 31 Jan 2017 23:00:00 GMT
。
如何将我的GMT + 1日期对象转换为时间戳等于GMT + 0中的相同日期?我试图使用moment.js,但我无法处理。
@edit
带有解释here 的代码
// User chooses 1st Feb 2017, but since components works with GMT +1
const userChoice = new Date(2017, 01, 01, 0, 0, 0)
// And backend works with timestamps I parse userChoice
const timestamp = moment(userChoice).valueOf()
// Which gives me timestamp equal to 31st of Dec 2016
console.log(timestamp, moment(timestamp).utc().format('DD/MM/YYYY hh:mm:ss Z'))
// But I want to have the same date as user chooses, but in a specific (GMT+0) timezone
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
答案 0 :(得分:0)
好的,我找到了解决方案。我们将调用date object&#34; mod&#34;这给了我们Wed Feb 01 2017 00:00:00 GMT+0100
。
const mod = new Date(1485903600000)
现在我们将创建一个变量,它为我们提供完全相同时间(例如,日,小时等)的时间戳,但是以UTC为单位。
const utc = Date.UTC(mod.getFullYear(), mod.getMonth(), mod.getDate(), mod.getHours(), mod.getMinutes(), mod.getSeconds())
如果我们想检查我们的时间戳是否正确,我们可以使用此时间戳和console.log创建新的日期。
console.log(1485907200000) // Wed Feb 01 2017 01:00:00 GMT+0100 <=> Wed Feb 01 2017 00:00:00 GMT+0000
答案 1 :(得分:0)
我不清楚你要做什么。看看你的代码:
// 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日午夜的Date对象。
// And backend works with timestamps I parse userChoice
const timestamp = moment(userChoice).valueOf()
你不是解析&#34; userChoice ,它是一个Date对象。您正在获取时间值,该值是自1970-01-01T00:00:00Z以来以毫秒为单位的偏移量,相当于userChoice.getTIme()
。
// Which gives me timestamp equal to 31st of Dec 2016
console.log(timestamp, moment(timestamp).utc().format('DD/MM/YYYY hh:mm:ss Z'))
不,它没有。原始日期是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方法。或者,如果您有Date对象,则可以通过主机偏移量进行调整:
// Create date for 1 Feb, 2017 based on host offset
var d = new Date(2017, 1, 1);
// Create UTC Date for same date
var u = new Date(Date.UTC(2017,1,1));
console.log('Local: ' + d.toISOString());
console.log('UTC : ' + u.toISOString());
// Adjust d for timezone offset
d.setMinutes(d.getMinutes() - d.getTimezoneOffset())
console.log('Adjusted: ' + d.toISOString());
&#13;
如果这没有帮助,请更新问题。
答案 2 :(得分:0)
日期对象无法转换为不同的时区,因为它只保留自1970年1月1日以来经过的毫秒数,并且对于世界各地的所有地方都是相同的。 / p>
但是,日期对象可能会根据时区偏移值在不同的时区(也称为本地时间)进行解释。
您甚至不需要知道时区偏移的固定值; 让计算机为您照顾它,因为它还包括在不同地点和正确的时间之间夏季夏令时的变化。 您需要知道的是可以在iana.org网站查找的时区说明。
let now = new Date(),
current = Intl.DateTimeFormat().resolvedOptions().timeZone,
zones = [current , 'Europe/London', 'Asia/Tokyo'];
zones.forEach((z)=>{
console.log("Time in "+ z + " is " +
now.toLocaleString("en-ES",{timeZone: z}))
});