我有一个字符串日期列表,如下所示:'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
?
谢谢!
答案 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;
关于时区的一个很好的资源是timezone tag info page。