我正在使用dialogflow从句子中识别意图和日期实体。然后我从响应中提取日期,该响应由JavaScript中的dialogflow返回。
但是dialogflow返回日期参数以不同格式形成示例“ 2019-08-23T12:00:00 + 05:30”,[2019-08-23T12:00:00 + 05:30],“ 2019-08” -23T12:00:00 + 05:30,2019-08-27T12:00:00 + 05:30“,” 2019-08-23T12:00:00 + 05:30 / 2019-08-24T12:00:00 +05:30“,[” 2019-08-27T12:00:00 + 05:30“,” 2019-08-29T12:00:00 + 05:30“]。
我希望提取后使用“ 2019-08-23,2019-08-24”格式的日期。
我写了JavaScript代码来提取所有可能格式的日期。但是当dialogflow返回新格式时,我的代码失败[{“ endDate”:“ 2019-08-31T23:59:59 + 05:30”,“ startDate”:“ 2019-08-25T00:00:00 + 05:30”当我说“下周”时。
我不确定dialogflow可以返回多少其他格式。所以有什么办法可以处理JavaScript中的这个问题。
下面是我的代码:
var getDateArray = function(start, end) {
var arr = "";
var dt = new Date(start);
while (dt <= end) {
arr += ((new Date(dt).toISOString()).split("T")[0])+",";
dt.setDate(dt.getDate() + 1);
}
return arr;
}
var date=["2019-08-23T12:00:00+05:30/2019-08-27T12:00:00+05:30"];
var isRange=false
var formatedDate=''
var dates=[]
if(typeof(date)=="object"){
if(date[0].includes('/'))
{
dates=date[0].split('/')
isRange=true
}
else
{
dates=date
}
}
else if(typeof(date)=="string")
{
formatedDate=date
if(formatedDate.includes('/'))
{
dates=formatedDate.split('/')
isRange=true
}
else if(formatedDate.includes(','))
{
dates=formatedDate.split(',')
isRange=true
}
else
{
dates=formatedDate
}
}
var startDate = new Date(dates[0]);
if(isRange==false){
var arr = "";
arr += ((new Date(dates[0]).toISOString()).split("T")[0])+",";
if(dates[1]!=null){
arr+=(new Date(dates[1]).toISOString()).split("T")[0]
}
arr
}
else{
var endDate = new Date(dates[1]);
getDateArray(startDate, endDate);
}
有没有更好的解决方案来获取日期。请提出建议。