如何使用偏移量将YYYYMMDDHHMMSS转换为UTC

问题描述

我在具有localTimeStamp和UTC偏移量的对象中获取日期,如下所示。

obj = {
 "localTimeStamp": 20200908232201 //YYYYMMDDHHMMSS
 "utcTimeOffset" : "+0630"
}

如何将其转换为

本地日期时间-格式DD-MM-YYYY HH:MM:SS

UTC日期时间-格式DD-MM-YYYY HH:MM:SS

我已经尝试过以下解决方案,但是如何在UTC中进行转换。

"20200908232201".replace(/^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/,'$2-$3-$1 $4:$5:$6');

解决方法

您可以尝试使用Luxon库,它实际上是moment.js的继承者,并具有许多强大的日期处理功能。

特别是,我们可以使用DateTime.fromFormat函数来解析提供的日期。

const DateTime = luxon.DateTime;
const obj = {
     "localTimeStamp": 20200908232201,//YYYYMMDDHHMMSS
     "utcTimeOffset" : "+0630"
}

const dt = DateTime.fromFormat(obj.localTimeStamp + obj.utcTimeOffset,"yyyyMMddHHmmssZZZ",{ setZone: true } );
console.log("Local time:",dt.toISO())
console.log("UTC Time:",dt.toUTC())
<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/1.25.0/luxon.min.js" integrity="sha512-OyrI249ZRX2hY/1CAD+edQR90flhuXqYqjNYFJAiflsKsMxpUYg5kbDDAVA8Vp0HMlPG/aAl1tFASi1h4eRoQw==" crossorigin="anonymous"></script>

,

如果您不想使用任何库,则可以尝试以下方法:

您已经具有所需格式的日期-(DD-MM-YYY HH:MM:SS)

let utcTimeOffset = '+0630';

  var d = new Date(
  '20200908232201'.replace(
    /^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/,'$2-$3-$1 $4:$5:$6'
  ) + utcTimeOffset
);

然后使用上述日期的UTC将日期转换为UTC:

var utcDate = new Date(
  Date.UTC(
    d.getUTCFullYear(),d.getUTCMonth(),d.getUTCDate(),d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds()
  )
);

最后使用以下格式从--p处以必需的格式打印日期

var MyDateString =
  ('0' + utcDate.getUTCDate()).slice(-2) +
  '-' +
  ('0' + (utcDate.getUTCMonth() + 1)).slice(-2) +
  '-' +
  utcDate.getUTCFullYear() +
  ' ' +
  ('0' + utcDate.getUTCHours()).slice(-2) +
  '-' +
  ('0' + utcDate.getUTCMinutes()).slice(-2) +
  '-' +
  ('0' + utcDate.getUTCSeconds()).slice(-2);

console.log(MyDateString); //08-09-2020 16-52-01

let utcTimeOffset = '+0630';

var d = new Date(
  '20200908232201'.replace(
    /^(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)$/,'$2-$3-$1 $4:$5:$6'
  ) + utcTimeOffset
);

var utcDate = new Date(
  Date.UTC(
    d.getUTCFullYear(),d.getUTCSeconds()
  )
);


var MyDateString =
  ('0' + utcDate.getUTCDate()).slice(-2) +
  '-' +
  ('0' + (utcDate.getUTCMonth() + 1)).slice(-2) +
  '-' +
  utcDate.getUTCFullYear() +
  ' ' +
  ('0' + utcDate.getUTCHours()).slice(-2) +
  '-' +
  ('0' + utcDate.getUTCMinutes()).slice(-2) +
  '-' +
  ('0' + utcDate.getUTCSeconds()).slice(-2);

console.log(MyDateString);

,

const obj = {
  localTimeStamp: 20200908232201,utcTimeOffset : "+0630"
};

const date = new Date((new Date(obj.localTimeStamp)).toUTCString() + obj.utcTimeOffset);

console.log(date.toUTCString());
console.log(date.toLocaleString());

,

您可以切片localTimeStamp(我从克里斯托夫的答案Christoph中得到了这个不错的主意)

const obj = {
    "localTimeStamp": "20200908232201","utcTimeOffset": "+0630"
};
let localTimeStamp = obj.localTimeStamp;
let utcTimeOffset = obj.utcTimeOffset;
let formattedDate = new Date(localTimeStamp.slice(0,4),localTimeStamp.slice(4,6) - 1,localTimeStamp.slice(6,8),localTimeStamp.slice(8,10),localTimeStamp.slice(10,12),localTimeStamp.slice(12,14));
let formattedDateToLocal = new Date(formattedDate + utcTimeOffset);
let formattedDateToUTC = new Date(formattedDate.toUTCString() + utcTimeOffset);
   
console.log(`UTC : ${formattedDateToUTC.getDate()}-${formattedDateToUTC.getMonth()}-${formattedDateToUTC.getFullYear()} ${formattedDateToUTC.getHours()}:${formattedDateToUTC.getMinutes()}:${formattedDateToUTC.getSeconds()}`)
console.log(`Local : ${formattedDateToLocal.getDate()}-${formattedDateToLocal.getMonth()}-${formattedDateToLocal.getFullYear()} ${formattedDateToLocal.getHours()}:${formattedDateToLocal.getMinutes()}:${formattedDateToLocal.getSeconds()}`)