忽略/不转换时区?

时间:2016-09-14 17:27:09

标签: javascript datetime

我的网页工作正常并按预期显示日期和时间,直到我必须添加new Date()以避免 deprecation warning。现在我的约会时间是5小时。

enter image description here

我该如何解决这个问题? vdv都应该是12:14:26,在这种情况下,fn应该是“Seconds ago”。

以下是完整代码:

var k = key;
var v = obj[key];
var vd = Date.parse(obj[key]));
if (moment(vd).isValid()) {
    var fn = moment(vd).fromNow();
    v = fn;
}
return {
    name: k,
    value: v
};

我尝试了基于this post的以下内容,但它带回了momentjs弃用警告:

var vd = new Date(Date.parse(obj[key])).toUTCString();

(但仍然没有用)

__________________________________________________________________________________

线程评论会很酷

  

如果您只是运行moment(v)会怎样?应该管用。 - Maggie Pint

确实有效,但我收到了弃用警告。

  

我只是看得更近了。 V的格式是带偏移的ISO8601,因此如果您只是致电moment(v),则不应该弃用。如果是,请尝试moment(v, moment.ISO_8601) - Maggie Pint

再次,有效,但我仍然得到弃用警告。

  

而不是var vd = new Date(Date.parse(obj[key])).toUTCString();你试过var vd = new Date(Date.parse(obj[key])).toISOString();吗?甚至更简单var vd = Date.parse(obj[key]) - user3

使用.toISOString()输出“无效日期”。 var vd = Date.parse(obj[key])是我原来的,它按预期工作,但我收到了警告。

  

您的v字符串似乎已使用ISO8601格式?当缺少时区信息时,可能会附加Z,或者请求片刻自动将其识别为UTC - Bergi

我刚试过var vd = new Date(Date.parse(obj[key] + "Z"));,它确实有效!

2 个答案:

答案 0 :(得分:2)

在您的示例中,您将v的值作为ISO8601字符串传递,而未指定任何偏移量。你实际谈论的是什么时间点是模棱两可的。

由于changes in the ECMAScript specification,某些浏览器会将该值解释为UTC,其他浏览器会将其解释为本地时间。

避免这种歧义的方法是使用日期构造函数。您拥有new DateDate.parse的任何地方,都会引入行为方面的潜在差异。只需使用时刻自己的解析器,并具体说明你的意图。

// your input
var v = "2016-09-14T12:14:26.149";

// pick only one of these:
var m = moment(v);    // input is local time
var m = moment.utc(v) // input is UTC

// then proceed as normal
if (m.isValid()) {
  var fn = m.fromNow();
  // etc.
}

如果输入位于某个其他时区,或者具有与UTC相关的其他特定固定偏移量,那么您可以使用各种其他选项来构造moment对象。但实际上,不要依赖Date对象来进行解析。这是弃用消息的重点。

如果输入总是处于预期的格式(您正在寻找无效的输入等),那么您应该指定期望的格式,以便您不要获得弃用警告。例如:

var m = moment.utc(v, "YYYY-MM-DD[T]HH:mm:ss.SSS");

此特定格式也可用作常量:

var m = moment.utc(v, moment.ISO_8601);

这个,以及更多内容in the Moment documentation

答案 1 :(得分:0)

看起来问题是当你创建从数据库中恢复的日期...因为它没有时区......但你知道它是" -0500",可能是你可以添加硬编码的那部分...不理想,但它的工作

Look at this example

function getMoment(v){
    var vd = moment(v+"-0500");
  var result = "?";
  if (vd.isValid()){
    result = vd.fromNow();
  }
  return result;
}

检查getMoment()功能,您只需复制并粘贴并在代码中使用它即可。