遇到问题,即从@ sys.date-time实体从对话框流返回的对象中提取日期列表

时间:2019-08-23 08:07:31

标签: javascript date dialogflow

我正在使用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);
}

有没有更好的解决方案来获取日期。请提出建议。

0 个答案:

没有答案