QDate date1,date2;
date1=ui->dateEdit_2->date();//提取开始时间
date2=ui->dateEdit_3->date();//提取结束时间
data_filter->setSourceModel(data_model);//data_model取出数据
ui-> tableView->setModel(data_filter);//关联
data_filter->setFilterKeyColumn(1);//选择时间列第一列
QString shijianduan=DateToReg(date1,date2);//转换成正则表达式
data_filter->setFilterRegExp(QRegExp(shijianduan));//选出数据
////完成///
QString MainWindow::DateToReg(QDate startDate,QDate endDate)//zhuan正则表达式
{ bool ok;
int startyear = startDate.toString("yyyy").toInt(&ok,10);
int startmonth=startDate.toString("MM").toInt(&ok,10);
QString startmonthStr=startDate.toString("MM");
// if(startmonth<10)startmonthStr="0"+startmonthStr;
int startday=startDate.toString("dd").toInt(&ok,10);
int endyear =endDate.toString("yyyy").toInt(&ok,10);
int endmonth=endDate.toString("MM").toInt(&ok,10);
QString endmonthStr=endDate.toString("MM");
// if(endmonth<10)endmonthStr="0"+endmonth;
int endday=endDate.toString("dd").toInt(&ok,10);
QString sb;
if(endyear-startyear>0)
{//跨年情况,获得月份正则表达式
if(startmonth<9){
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-0[");
sb.append(QString::number(startmonth+1));
sb.append("-9])|");
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-1[0-2])|");
}
else if(startmonth!=12){
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-1[");
sb.append(QString::number(startmonth%10+1));
sb.append("-2])|");
}
if(1< endmonth&&endmonth<11){
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-0[1-");
sb.append(QString::number(endmonth-1));
sb.append("])|");
}else if(endmonth!=1){
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-[0-9]");
sb.append(",");
sb.append(QString::number(endyear));
sb.append("-1[0-");
sb.append(QString::number(endmonth%10-1));
sb.append("])|");
}
sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
}
else{//不跨年情况,获得月份正则表达式
if(endmonth-startmonth>1)
{//相隔了两个月以上
if(endmonth<11){
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-");
sb.append("0[");
sb.append(QString::number(startmonth));
sb.append("-");
sb.append(QString::number(endmonth-1));
sb.append("])|");
}
else if(startmonth>8){
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-");
sb.append("1[");
sb.append(QString::number((startmonth+1)%10));
sb.append("-");
sb.append(QString::number(endmonth%10-1));
sb.append("])|");
}
else {
sb.append("(");
sb.append(QString::number(startyear));
sb.append("-0[");
sb.append(QString::number(startmonth+1));
sb.append("-9],");
sb.append(QString::number(startyear));
sb.append("-1[0-");
sb.append(QString::number(endmonth%10-1));
sb.append("])|");
}
sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
}
else if(endmonth-startmonth==1)
{//只隔了一个月情况
sb.append(differentMonthDayReg(startyear,startmonthStr,startday,endyear,endmonthStr,endday));
}
else
{//同一个月的情况
if(endday/10-startday/10>1)
{
sb.append(QString::number(startyear));
sb.append("-");
sb.append(startmonthStr);
qDebug()<<"ceshi"<<startmonthStr;
sb.append("-[");
sb.append(QString::number(startday/10+1));
sb.append("-");
sb.append(QString::number(endday/10-1));
sb.append("]|");
sb.append(QString::number(startyear));
sb.append("-");
sb.append(startmonthStr);
sb.append("-");
sb.append(QString::number(startday/10));
sb.append("[");
sb.append(QString::number(startday%10));
sb.append("-9]|");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-");
sb.append(QString::number(endday/10));
sb.append("[0-");
sb.append(QString::number(endday%10));
sb.append("]");
}
else if(endday/10-startday/10==1)
{
sb.append(QString::number(startyear));
sb.append("-");
sb.append(startmonthStr);
sb.append("-");
sb.append(QString::number(startday/10));
sb.append("[");
sb.append(QString::number(startday%10));
sb.append("-9]|");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-");
sb.append(QString::number(endday/10));
sb.append("[0-");
sb.append(QString::number(endday%10));
sb.append("]");
}
else{
sb.append(QString::number(startyear));
sb.append("-");
sb.append(startmonthStr);
sb.append("-");
sb.append(QString::number(startday/10));
sb.append("[");
sb.append(QString::number(startday%10));
sb.append("-");
sb.append(QString::number(endday%10));
sb.append("]");
}
}
}
return sb;
}
QString MainWindow:: differentMonthDayReg(int startyear,QString startmonthStr,int startday,int endyear,QString endmonthStr,int endday)
{
QString sb;
if(startday/10<3){
sb.append("(");
sb.append((QString::number(startyear)));
sb.append("-");
sb.append(startmonthStr);
sb.append("-[");
sb.append(QString::number(startday/10+1));
sb.append("-3])|");
sb.append("(");
sb.append((QString::number(startyear)));
sb.append("-");
sb.append(startmonthStr);
sb.append("-");
sb.append(QString::number(startday/10));
sb.append("[");
sb.append(QString::number(startday%10));
sb.append("-9])|");
}
else {
sb.append("(");
sb.append((QString::number(startyear)));
sb.append("-");
sb.append(startmonthStr);
sb.append("-3[");
sb.append(QString::number(startday%10));
sb.append("-1])|");
}
if(endday/10>0)
{
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-[0-");
sb.append(QString::number(endday/10-1));
sb.append("])|");
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-");
sb.append(QString::number(endday/10));
sb.append("[0-");
sb.append(QString::number(endday%10));
sb.append("])");
}
else {
sb.append("(");
sb.append(QString::number(endyear));
sb.append("-");
sb.append(endmonthStr);
sb.append("-");
sb.append(QString::number(endday/10));
sb.append("[0-");
sb.append(QString::number(endday%10));
sb.append("])");
}
return sb;
}