如何将javascript日期作为“本地时间”摄取然后将其转换为UTC,反之亦然?

时间:2018-05-01 18:36:34

标签: javascript momentjs

我有以下功能:

var input = "December 25, 2018 01:02:20";
var fmt = 'MMMM DD, YYYY HH:mm:ss';
var currentTimeZone = "utc";

function convertUtcToLocalViceVersa() {
  console.log(input);
  var m = moment.utc(input, fmt);
  if(currentTimeZone == 'utc') {
    input = m.local().format(fmt);
    currentTimeZone = "local";
  } else {
    input = m.utc().format(fmt);
    currentTimeZone = "utc";
  }
}

在我的HTML中,我有一个调用convertUtcToLocalViceVersa()函数的按钮;

我看到的问题是,按下按钮后说了5次..输入似乎不是'像我想要的那样'在utc和local之间来回切换'。我怎样才能做到这一点?

注意:我想确保每次单击该按钮时,都会使用'input'文本而不是对moment对象的引用。

1 个答案:

答案 0 :(得分:0)

问题是您始终使用moment.utc在UTC模式下解析input

如果分支使用moment()(本地模式)或moment.utc(UTC模式)基于currentTimeZone值,则必须在内部移动解析代码。

这是一个实时样本:



var input = "December 25, 2018 01:02:20";
var fmt = 'MMMM DD, YYYY HH:mm:ss';
var currentTimeZone = "utc";

function convertUtcToLocalViceVersa() {
  console.log(input);
  // var m = moment.utc(input, fmt);
  if(currentTimeZone == 'utc') {
    var m = moment.utc(input, fmt);
    input = m.local().format(fmt);
    currentTimeZone = "local";
  } else {
    var m = moment(input, fmt);
    input = m.utc().format(fmt);
    currentTimeZone = "utc";
  }
  console.log(input);
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>

<button onclick="convertUtcToLocalViceVersa()">Convert</button>
&#13;
&#13;
&#13;

Local vs UTC vs Offset指南是一个非常有用的指南,可以理解矩解析的工作原理。