Javascript Moment.js格式设置";日期(2021年0月1日);

Javascript Moment.js格式设置";日期(2021年0月1日);,javascript,momentjs,Javascript,Momentjs,我正在使用moment.js,需要帮助转换以下字符串: let dtString = "Date(2021,0,1)"; let dt = moment(dtString, 'YYYY,M,D').format('l'); “日期(2021,0,1)”的月份为零。上面的代码返回无效日期 当我尝试“日期(2021,1,1)”时,dt返回2021年1月1日 我如何才能有时间识别M值是一个以零为基础的月份,并将“日期(2021,0,1)”返回为1/1/2021 更新: 这是我刚刚

我正在使用moment.js,需要帮助转换以下字符串:

let dtString = "Date(2021,0,1)";
let dt = moment(dtString, 'YYYY,M,D').format('l');
“日期(2021,0,1)”
的月份为零。上面的代码返回无效日期

当我尝试“日期(2021,1,1)”时,
dt
返回2021年1月1日

我如何才能有时间识别
M
值是一个以零为基础的月份,并将
“日期(2021,0,1)”
返回为1/1/2021

更新:
这是我刚刚试过的另一个东西…同样,它很笨重,但很有效

let dtString=“日期(2021,0,1)”;
让dtArray=dtString.replace(“日期(“,”).replace(“),”).split(“,”).map(编号);
让jsDate=newdate(dtArray[0],dtArray[1],dtArray[2]);
设dt=力矩(jsDate).format('l');
控制台日志(dt)

看起来像是矩()。month()是基于0的月份编号,因此如果您将其更改为
矩([2012,0,31])
它应该可以工作。

一种稍微笨拙的方法是将
dtString
解析为其部分,然后在,这将告诉momentjs以与本机
Date
API相同的方式解析它们(包括零索引月份值等):

let dtString=“日期(2021,0,1)”;
设dtStringFormat=/Date\(?\d{4}),(?\d{1,2}),(?\d{1,2})\)/g;
让groups=dtStringFormat.exec(dtString.groups);
设dt=力矩(对象值(组));
console.dir(dt)

免责声明。我既不建议也不赞成使用
eval
,因为它可能被滥用

话虽如此,如果你相信日期字符串不会包含任何危险的内容,那么你可以这样使用它。不需要解析

let dtString=“日期(2021,0,1)”;
let date=eval('new'+dtString);
设dt=时刻(日期)。格式('l');
document.getElementById('date')。innerText=dt


当然超出了您提出的问题的范围,但为了满足我自己的好奇心,
dtString
是从哪里来的,它输出了零索引月份值,像这样?@esqew它看起来几乎像是JS代码开始的(新日期(2021,0,1)
或其他什么的一部分,这就引出了这个问题,为什么他们试图从一开始就将其输入到矩构造函数中。“我如何才能让矩识别M值是一个以零为基础的月份,并将“日期(2021,0,1)”返回为1/1/2021?”——与其让它猜测您输入到它中的那些看似随意的东西可能意味着什么,不如指定格式。(你可能仍然需要去掉
日期(
,不过,我目前不知道moment是否允许定义“占位符”让内容忽略。)您好,我们的API返回“日期(2021,0,1)”,因为稍后在程序中,这个字符串会在Google可视化表中使用。GV知道如何将其转换为日期。嗨,我刚刚添加了一个更新。我从你的想法开始,把它分解成碎片,然后重新组装。这有点不同,但完成了相同的事情。看起来我不得不用“笨重”的方法来处理这件事。我的JavaScript经验是中等的,所以我总是向专家咨询最佳实践的建议。你看到你的方式和我的方式有速度上的差异吗?@c我会问一个很好的问题,最好用一个实用程序来回答,比如-我已经为你设置了在本地设置中运行的案例。一旦运行,它将向您展示哪种方法在您的环境中更快。您好,谢谢您的想法!我在更新2中发布了它以及@eskew的建议。最初,我使用了这种方法。我也不喜欢使用
eval()
,尽管我相信除了
“Date(2021,0,1)”
之外,不会向其中发送任何内容。谢谢你的回复。我非常重视每个人的评论。