CET时区中的日期到用户的时区

问题描述 投票:0回答:2

我有一个字符串日期列表,如下所示:'17/12/2017 19:34'。他们是CET日期。

如何将其转换为用户的浏览器日期?

我这样做:

const tzGuess = moment.tz.guess()

export const toTimeZone = (time) => {
  const format = 'DD/MM/YYYY HH:mm'
  return moment(time, format).tz(tzGuess).format(format)
}

console.log(toTimeZone('17/12/2017 19:34', tzGuess))

但我怎么能对moment说我最初通过的日期是CET

谢谢!

javascript date datetime momentjs
2个回答
1
投票

您可以使用moment.tz函数使用给定时区(例如'Europe/Madrid')解析时间字符串。

问题是:CET是什么意思?如果您的输入具有固定的UTC + 1偏移量(如中欧时间),那么您可以使用RobG的解决方案。如果你必须同时考虑CET和CEST,我认为最好的方法是使用moment.tz

这是一个实时代码示例:

const tzGuess = moment.tz.guess()

const toTimeZone = (time) => {
  const format = 'DD/MM/YYYY HH:mm'
  return moment.tz(time, format, 'Europe/Madrid').tz(tzGuess).format(format)
}

console.log(toTimeZone('17/12/2017 19:34', tzGuess))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.4/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data-2012-2022.min.js"></script>

关于时区的一个很好的资源是timezone tag info page


1
投票

如果没有moment.js,则将字符串解析为Date,将其视为UTC,然后调整CET偏移量(+0100)。然后,您可以使用客户端的本地时间值对其进行格式化:

// Parse date in format DD/MM/YYYY HH:mm
// Adjust for CET timezone
function parseCET(s) {
  var b = s.split(/\D/);
  // Subtract 1 from month and hour
  var d = new Date(Date.UTC(b[2], b[1]-1, b[0], b[3]-1, b[4]));
  return d;
}

var s = '17/12/2017 19:34';
console.log(parseCET(s).toString());

但是,如果时间需要观察源时间戳的夏令时(CEST),则需要考虑到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.