use*_*867 7 javascript timezone datetime data-conversion timezone-offset
我有一个挑战,即后端数据始终以UTC时间存储.我们的前端数据始终在CST中显示.我无法访问这个"黑匣子".
我想在我们的数据仓库中反映这一点.它位于欧洲(CET).所以"本地"转换不起作用.
我想知道将UTC时间准确转换的最简单,最直接的方法(我可以将它以纪元毫秒或日期格式'2015-01-01 00:00:00')转换为中央标准时间.(根据夏令时落后5或6小时).
我看到很多关于转换到"本地"时间的线索......再次我不想要这个,我也不想简单地减去6个小时,这将是半年的错误.
有人有主意吗?这似乎是一个非常普遍的问题,但我一直在寻找,但一无所获.
将moment.js与moment-timezone附加组件一起使用可使此任务变得简单.
// construct a moment object with UTC-based input
var m = moment.utc('2015-01-01 00:00:00');
// convert using the TZDB identifier for US Central time
m.tz('America/Chicago');
// format output however you desire
var s = m.format("YYYY-MM-DD HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
此外,由于您指的是整个北美中部时区,您应该说"中央时间"或"CT".应用于北美的缩写"CST"明确表示UTC-6,而"CDT"缩写将在夏令时期间用于UTC-5.
但是要注意缩写."CST"可能意味着"中国标准时间".(它实际上有五种不同的解释).
您可以使用时区偏移量来确定是否应减去 5 小时或 6 小时。
var dateJan;
var dateJul;
var timezoneOffset;
var divUTC;
var divCST;
// Set initial date value
dateValue = new Date('10/31/2015 7:29:54 PM');
divUTC = document.getElementById('UTC_Time');
divCST = document.getElementById('CST_Time');
divUTC.innerHTML = 'from UTC = ' + dateValue.toString();
// Get dates for January and July
dateJan = new Date(dateValue.getFullYear(), 0, 1);
dateJul = new Date(dateValue.getFullYear(), 6, 1);
// Get timezone offset
timezoneOffset = Math.max(dateJan.getTimezoneOffset(), dateJul.getTimezoneOffset());
// Check if daylight savings
if (dateValue.getTimezoneOffset() < timezoneOffset) {
// Adjust date by 5 hours
dateValue = new Date(dateValue.getTime() - ((1 * 60 * 60 * 1000) * 5));
}
else {
// Adjust date by 6 hours
dateValue = new Date(dateValue.getTime() - ((1 * 60 * 60 * 1000) * 6));
}
divCST.innerHTML = 'to CST = ' + dateValue.toString();Run Code Online (Sandbox Code Playgroud)
<div id="UTC_Time"></div>
<br/>
<div id="CST_Time"></div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14028 次 |
| 最近记录: |