2013-07-12 57 views
1

用戶能夠確定查詢的參數,如:解析參數,並將其轉換爲DateTime在Javascript

StartTime 
EndTime 
ProductId 

他可以在任何日期設置爲StartTimeEndTime,但他也想參照的當前日期類似[email protected]

他還想從中增加或減少天數,如[email protected],所以當查詢運行時,它總是會選擇最後30天。

這些參數由javascript代碼處理。 你會如何解析這些佔位符(@Today,@CurrentMonth,@ThisWeek等),將它們轉換爲DateTime並對它們進行計算?

+0

「今日」是指今天,上午0:00或全天跨度至中午12:00? – Bergi

+0

「今日」我的意思是「2013-07-12 00:00:00」,但我不在乎時間部分,只是日期部分。 – papaiatis

+0

只是因爲有人輸入'EndTime = @ Today'可能會期望今天結束的結果... – Bergi

回答

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); 
} 
+0

我嘗試了以下輸入:'@今日','@Today - 30','@今日-30',但他們都沒有工作。我相信最後一個應該工作。我錯過了什麼? – papaiatis

+1

這裏是一個jsFiddle:http://jsfiddle.net/9y7YV/ – papaiatis

+0

感謝您的測試,這應該是我的工作:-)我忘記了取代整個比賽的替代函數的參數(不僅是捕獲組) 。修復答案,並[更新小提琴](http://jsfiddle.net/9y7YV/2/)。 – Bergi

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'); 

通過使用你自己的價值觀,你就可以寫一個程序/函數,將完成你需要使用的是什麼這個庫

+0

這個看起來很棒!我會試一試! – papaiatis

+0

酷,讓我知道它是如何結果 – epoch

+0

這是一個偉大的插件,但它不能處理我的特殊情況,只有「今天」。無論如何。 – papaiatis