Javascript 将日期转换为本地日期时间

Javascript 将日期转换为本地日期时间,javascript,momentjs,Javascript,Momentjs,我有UTC日期变量: let d = '/Date(1538560800000+0200)/'; 我试图将其转换为本地时间,但没有成功: moment(accessGroup.TimeOn).toDate() // result: Wed Oct 03 2018 12:00:00 GMT+0200 (Central European Summer Time) moment(d).local().format("DD-MM-YYYY hh-mm-ss"); // result: "03-10-2

我有UTC日期变量:

let d = '/Date(1538560800000+0200)/';
我试图将其转换为本地时间,但没有成功:

moment(accessGroup.TimeOn).toDate() // result: Wed Oct 03 2018 12:00:00 GMT+0200 (Central European Summer Time)
moment(d).local().format("DD-MM-YYYY hh-mm-ss"); // result: "03-10-2018 12-00-00"
moment.utc(d).local().format("DD-MM-YYYY hh-mm-ss"); // result: "03-10-2018 12-00-00"

我想知道当地时间14:00:00。正确的方法是什么?

我还创建了JSFIDLE:

所有格式的代码如下所示:

 var localDate = new Date(1538560800000+0200);
 var utcFormat = moment(localDate).utc().format('YYYY-MM-DD HH:MM:SS');
 var localFormat = moment.utc(utcFormat, 'YYYY-MM-DD 
 HH:MM:SS').local().format('MM/DD/YYYY hh:mm a');
 console.log('LocalDate: ', localDate);
 console.log('utcFormat: ', utcFormat);
 console.log('localFormat: ', localFormat);
从字符串创建力矩时,我们首先检查字符串 匹配已知的ISO 8601格式,然后检查字符串是否匹配 RFC 2822日期-时间格式,然后再返回到新的 未找到已知格式时的日期(字符串)

矩接受ISO 8601和RFC 2822格式的字符串参数,您的输入
/Date(153856080000+0200)/
两者都不是。但是,当您将其传递给
时,它会尝试将其转换为字符串,并最终提取可能的时间戳参数,即
153856080000
。这可以在下面的代码中看到,因为两者最终都是相同的值

let d = '/Date(1538560800000+0200)/'
moment(d).toString() // Wed Oct 03 2018 12:00:00 GMT+0200
moment(1538560800000).toString() // Wed Oct 03 2018 12:00:00 GMT+0200
153856080000
转换为GMT时为2018年10月3日星期三10:00:00 GMT+0000,因此输出以下代码

moment.utc(d).toString() // Wed Oct 03 2018 10:00:00 GMT+0000
所以,在任何情况下,你都不会得到14:00:00的时间,因为这个时间戳并不代表这一点。时间戳总是绝对的(以格林尼治标准时间为单位),有


我觉得这里的差距是你对输入字符串的错误解释,你在想

  • 153856080000
    转换为本地日期时间,即10月3日12:00:00(本地)
  • 添加
    +0200
    小时,这意味着将其改为10月3日14:00:00
但是,正确的阅读方法是

  • 153856080000
    转换为日期时间,即10月3日10:00:00(绝对值/GMT)
  • +0200
    表示源的时区,即
    GMT+0200

同样,由于上述原因,第一种解释是错误的-unix时间戳总是以GMT为单位,它们从不在本地时区。

例如,这是可行的,但如何为我的UTC时间/Date(153856080000+0200)/“不,我得到的结果是:'10/03/2018 12:00 pm',我应该得到'14:00'因为'/Date(153856080000+0200)/'是UTC时间。您所在的时区是什么?目前我所在的时区与UTC相比为+2小时。因此,我需要查看14:00。谢谢,主要问题是日期格式,我从服务器获得:)