2013-07-12 21 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