2015-07-10 51 views
0

我面臨的問題是在JavaScript中按時間間隔比較日期。通過時間間隔名稱比較日期

我不得不使用間隔名稱,如1 year6 months等,這在數據庫中比較他們對now()硬編碼,看是否有選擇的日期是這個區間內。

我似乎無法找到任何可以做到這一點的功能。喜歡的東西

now() + interval '1 year' PostgreSQL中

+0

你將需要使用一個庫...一個很好的選擇是[moment.js](http://momentjs.com/) –

+0

沒有你需要任何庫....我只會使用時間戳。如果「now()」時間戳在其他時間戳之間,則從您的時間間隔中獲取「開始時間戳記」和「結束時間戳記」。 – messerbill

回答

0

您可以使用獲得方法和設置日期組件。

實施例:

var d = new Date(); 
 
d.setMonth(d.getMonth() + 6); 
 
document.write(d);

設置到超出範圍將調整其它組分以形成正確的日期的值的組件。例如,如果您在十月份添加六個月,以便將月份數設置爲15,則它將自動換行至下一年,並將月份設置爲四月份。

使用像"6 months"這樣的字符串只是一個解析字符串並進行正確操作的問題。例如:

var d = new Date(); 
var s = '6 months'; 

var p = s.split(' '); 
var n = parseInt(p[0], 10); 
switch (p[1]) { 
    case 'year': 
    case 'years': d.setFullYear(d.getFullYear() + n); break; 
    case 'month': 
    case 'mongths': d.setMonth(d.getMonth() + n); break; 
    case 'day': 
    case 'days': d.setDate(d.getDate() + n); break; 
} 
0

如果我正確地遵循了問題,你可以使用JavaScript日期方法getFullYeargetMonth等,帶着幾分邏輯:

var datestring = "1992-06-22"; 
 
var d = new Date(datestring); // date from sql 
 

 
var year = d.getFullYear(); 
 
var month = d.getMonth(); 
 

 
if (year == 2015) 
 
    document.write("This year"); 
 
else if (year > 2005) 
 
    document.write("Within last ten years") 
 
else if (year > 1965) 
 
    document.write("Within last fifty years") 
 

 
if (year == 2015 && month < 6) 
 
    document.write("First six months of this year") 
 

 
//and so on

http://jsfiddle.net/uuy2d2fk/