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

问题描述 投票:3回答:3

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

/Date(1439596800)/

以上日期是:

August 30, 2015

使用像这样的momentjs:

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

得到我这个:

01/17/1970

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

javascript momentjs unix-timestamp epoch
3个回答
3
投票

这很简单。

您的API提供UNIX时间戳 - 默认情况下,moment(arg)假定arg自1970年1月1日起以毫秒为单位传递。

要转换它,您必须先删除/Date()\。我会使用一个删除所有非数字字符的RegEx:

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

这只会留下数字。现在,你可以跑了

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

Moment.js Reference for UNIX timestamps


1
投票

时间戳以秒为单位而不是秒,moment()只能理解毫秒数。您可以使用moment.unix()函数

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

但是你仍然需要从1439596800中提取/Date(1439596800)/,这可以通过一个简单的正则表达式来完成

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

0
投票

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

我正在使用正则表达式来获取括号内的数字,确保逃避斜线和parens。

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 { }
© www.soinside.com 2019 - 2024. All rights reserved.