1

ユーザーは、次のようなクエリのパラメーターを決定できます。

StartTime
EndTime
ProductId

彼は任意の日付をStartTimeandに設定できますEndTimeが、現在の日付を のように参照したいと考えています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 に答える