如何在Javascript中将UTC / GMT日期时间转换为CST? (不是本地的,CST总是)

时间:2015-12-18 18:31:08

标签: javascript datetime timezone data-conversion timezone-offset

我遇到了一个挑战,即后端数据始终以UTC时间存储。我们的前端数据始终在CST中显示。我无法访问这个黑框。'

我想在我们的数据仓库中反映这一点。它位于欧洲(CET)。那么"本地"转换不起作用。

我想知道准确转换UTC时间的最简单,最直接的方法(我可以在epoch毫秒或日期格式中使用它' 2015-01-01 00:00:00')到中央标准时间。 (根据夏令时落后5或6小时)。

我看到很多关于转换到本地'时间......再一次,我不想要这个,我也不想简单地减去6个小时,这将是半年的错误。

有人有什么想法吗?这似乎是一个非常普遍的问题,但我一直在寻找,但一无所获。

4 个答案:

答案 0 :(得分:5)

moment.jsmoment-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");

此外,由于您指的是整个北美中部时区,您应该说“中央时间”和“#34; CT"”。缩写" CST"应用于北美时明确表示UTC-6,而CDT"在夏令时期间,缩写将用于UTC-5。

虽然要小心缩写。 " CST"可能意味着"中国标准时间"。 (它实际上有five different interpretations)。

答案 1 :(得分:1)

您可以使用时区偏移来确定是否应减去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();
&#13;
<div id="UTC_Time"></div>
<br/>
<div id="CST_Time"></div>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以使用下面的代码片段进行转换。

function convertUTCtoCDT() {
    var timelagging = 6; // 5 or 6
    var utc = new Date();
    var cdt = new Date(utc.getTime()-((1 * 60 * 60 * 1000) * timelagging));
    console.log("CDT: "+cdt);
}

答案 3 :(得分:0)

let newDate = moment(new Date()).utc().format("YYYY-MM-DD HH:mm:ss").toString()
var m = moment.utc(newDate);
m.tz('America/Chicago');
var cstDate = m.format("YYYY-MM-DD HH:mm:ss");