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

时间:2017-12-17 22:50:05

标签: javascript date datetime momentjs

我有一个字符串日期列表,如下所示:'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

谢谢!

2 个答案:

答案 0 :(得分: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),那么您需要考虑到这一点。

答案 1 :(得分: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>
&#13;
&#13;
&#13;

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