1

用户能够确定查询的参数,例如:

StartTime
EndTime
ProductId

他可以将任何日期设置为StartTimeEndTime但他也想引用当前日期,例如StartTime=@Today

他还想从中添加或减去天数,例如,StartTime=@Today-30当查询运行时,它将始终选择最后 30 天。

这些参数由 javascript 代码处理。您将如何解析这些占位符(@Today, @CurrentMonth,@ThisWeek等),将它们转换为 DateTime 并对其进行计算?

4

2 回答 2

2

DateJS具有一些非常强大的解析/操作日期的功能。以下摘录来自他们的主页:

// What date is next thursday?
Date.today().next().thursday();

// Add 3 days to Today
Date.today().add(3).days();

// Is today Friday?
Date.today().is().friday();

// Number fun
(3).days().ago();

// 6 months from now
var n = 6;
n.months().fromNow();

// Set to 8:30 AM on the 15th day of the month
Date.today().set({ day: 15, hour: 8, minute: 30 });

// Convert text into Date
Date.parse('today');
Date.parse('t + 5 d'); // today + 5 days
Date.parse('next thursday');
Date.parse('February 20th 1973');
Date.parse('Thu, 1 July 2004 22:30:00');

通过使用你自己的值,你将能够编写一个程序/函数来完成你使用这个库所需要的东西

于 2013-07-12T10:45:08.170 回答
1

您可以使用简单的正则表达式来匹配它们:

var date = input.replace(/@(Today|ThisWeek|CurrentMonth)([+-]\d+)?/, function(_, expr, days) {
    var curr = new Date();
    if (expr == "Today")
        curr.setHours(0, 0, 0, 0); // to Midnight
    else if (expr == "ThisWeek")
        curr.setDate(curr.getDate() - ((curr.getDay()+6) % 7)); // to Monday
    else if (expr == "CurrentMonth")
        curr.setDate(1); // to first of month
    else
        return "unknown keyword";
    if (days)
        curr.setDate(curr.getDate() + parseInt(days, 10));

    return formatDate(curr);
});

function formatDate(d) {
    return d.getFullYear()+"-"+("0"+(1+d.getMonth())).slice(-2)+"-"+("0"+d.getDate()).slice(-2);
}
于 2013-07-12T11:42:21.440 回答