【问题标题】:How to convert YYYYMMDDHHMMSS to UTC using offset如何使用偏移量将 YYYYMMDDHHMMSS 转换为 UTC
【发布时间】:2020-11-02 09:50:49
【问题描述】:

我在具有 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');

【问题讨论】:

  • 我不会打扰并使用 MomentJS,它已经为您解决了所有问题。日期操作、格式设置、时区,随你所想
  • @JeremyThille,宇宙中的一切都可用,那么为什么存在这个论坛?
  • @NRaj 是 localTimeStamp 只是一个普通的 Unix 时间戳?
  • @JanakiRajeshDuvvuri,它的日期格式为 YYYYMMDDHHMMSS

标签: javascript node.js date-formatting date-conversion


【解决方案1】:

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

您已经拥有所需格式的日期 - (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()
  )
);

最后使用下面的格式在所需的 fromat 中打印日期 -

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.getUTCMonth(),
    d.getUTCDate(),
    d.getUTCHours(),
    d.getUTCMinutes(),
    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);

【讨论】:

    【解决方案2】:

    您可以尝试使用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>

    【讨论】:

      【解决方案3】:

      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());

      【讨论】:

      • obj.localTimeStamp 不是毫秒,它的日期格式为 YYYYMMDDHHMMSS
      【解决方案4】:

      您可以切片 localTimeStamp(我从 Christoph 的回答 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()}`)

      【讨论】:

        猜你喜欢
        • 2012-05-01
        • 2011-03-22
        • 2012-08-02
        • 1970-01-01
        • 1970-01-01
        • 2015-02-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多