使用 MomentJS 将 /Date(####)/ 转换为本地 MM/dd/yyyy 时遇到问题

Having trouble converting /Date(####)/ to MM/dd/yyyy local with MomentJS

使用外部 API 向我发送日期,例如:

/Date(1439596800)/

以上日期为:

August 30, 2015

像这样使用 momentjs:

moment("/Date(1439596800)/").format("MM/DD/YYYY");

给我这个:

01/17/1970

我知道我应该乘以 * 1000 但希望有一个特定的 MomentJS 方法。

时间戳以秒为单位而不是秒并且moment() only understands milliseconds. You can use the moment.unix()函数

moment.unix("1439596800").format("MM/DD/YYYY"); // returns 08/15/2015

但是您仍然需要从 /Date(1439596800)/ 中提取 1439596800,这可以使用简单的正则表达式

来完成
moment.unix(/Date\((\d+)\)/.exec(input)[1]).format("MM/DD/YYYY"); 
// returns 08/15/2015

比较简单。

您的 API 给出了一个 UNIX 时间戳 - 默认情况下,moment(arg) 假定 arg 自 1970 年 1 月 1 日以来以毫秒为单位传递。

要转换它,您必须先删除 /Date()\。 我会使用去除所有非数字字符的正则表达式:

myString = myString.replace(/\D/g,'');

这将只留下数字。 现在,您可以 运行

moment.unix(myString).format("MM/DD/YYYY");

Moment.js Reference for UNIX timestamps

问题是多余的字符。首先摆脱它们并繁殖。

我正在使用正则表达式从括号内获取数字,确保转义斜杠和括号。

var input = "/Date(1439596800)/"
var regex = /\/Date\((\d+)\)\//;
var match = input.match(regex);
if(match){
  var stringUnixTs = match[1];
  var tsMs = Number(stringUnixTs) * 1000;
  var date = new Date(tsMs); // or pass ts directly into moment
} else { }