使用外部API向我发送日期,例如:
/Date(1439596800)/
以上日期是:
August 30, 2015
使用像这样的momentjs:
moment("/Date(1439596800)/").format("MM/DD/YYYY");
得到我这个:
01/17/1970
我知道我应该乘以* 1000,但希望有一个特定的MomentJS方法。
这很简单。
您的API提供UNIX时间戳 - 默认情况下,moment(arg)
假定arg自1970年1月1日起以毫秒为单位传递。
要转换它,您必须先删除/Date(
和)\
。我会使用一个删除所有非数字字符的RegEx:
myString = myString.replace(/\D/g,'');
这只会留下数字。现在,你可以跑了
moment.unix(myString).format("MM/DD/YYYY");
时间戳以秒为单位而不是秒,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
问题是额外的字符。首先摆脱它们并繁殖。
我正在使用正则表达式来获取括号内的数字,确保逃避斜线和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 { }