【问题标题】:How to create a Date object for a given timezone and then convert it to UTC如何为给定时区创建日期对象,然后将其转换为 UTC
【发布时间】:2021-08-16 02:20:31
【问题描述】:

我的 NodeJS 服务器上有以下字符串,它使用 UTC 时间。

const year = '2021';
const month = '05';
const day = '28';
const hour = '17';
const minute = '40';
const second = '00';

如果我现在创建一个像 new Date(year, month, day, hour, minute, second) 这样的 Date 对象,它显然会为 UTC 创建 Date 对象。但是,我正在解析的字符串是以 CET 而非 UTC 记录的。

如何将信息(如上所示)解析为设置为 UTC 的服务器上给定时区的日期?我还需要尊重各个时区的夏季和冬季。

之后,我实际上需要将该 Date 对象转换为 UTC,因为我需要它作为 UTC 时间戳将其发送到外部系统。

我很难理解它。谢谢!

【问题讨论】:

标签: javascript node.js datetime timestamp timezone


【解决方案1】:

试试这个...

var date = new Date(year, month, day, hour, minute, second); 
var utc = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(),
 date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());

console.log(new Date(utc));

查看 moment.js --> https://momentjs.com/timezone/docs/ 您可能需要尝试转换,但这应该不会太难。

【讨论】:

  • 由于服务器设置为 UTC,date 已经是 UTC。
  • 第一部分完全按照 OP 所说他们不想做的,第二部分是多余的,可以是 let utc = date.getTime() 或只是 let utc = +date
【解决方案2】:

如果你使用的是 Nodejs,那么安装这个包date-and-time

使用这个指令

npm i date-and-time

然后要求它

const date = require('date-and-time');

你的约会

const now = new Date();
date.format(now, 'YYYY/MM/DD HH:mm:ss');    // => '2015/01/02 23:14:05'
date.format(now, 'ddd, MMM DD YYYY');       // => 'Fri, Jan 02 2015'
date.format(now, 'hh:mm A [GMT]Z');         // => '11:14 PM GMT-0800'
date.format(now, 'hh:mm A [GMT]Z', true);   // => '07:14 AM GMT+0000'

【讨论】:

  • OP 想要解析一个带偏移量的时间戳,然后产生一个时间值。这个答案也不行。
  • 如果你访问了那个日期和时间包页面,你可以看到,就像格式一样,有一个 PARSE 函数阅读它你就会明白
  • 你完全没有抓住重点。 OP 不想解析任何东西,他们想为特定时区中的年、月、日等的一组特定值创建一个日期。格式化部分很简单。
猜你喜欢
  • 2022-07-13
  • 2011-08-30
  • 1970-01-01
  • 2017-11-07
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-11-19
  • 2020-09-29
相关资源
最近更新 更多