我想遍歷一系列日曆日期,每次迭代都是+1天。我會在Java中使用圍繞JodaTime構建的東西 - NodeJS中是否有類似的東西?遍歷NodeJS中的日期範圍
26
A
回答
67
您可以在Node.js應用程式使用moment.js。
npm install moment
然後,你可以很容易做到這一點:
var moment = require('moment');
var a = moment('2013-01-01');
var b = moment('2013-06-01');
// If you want an exclusive end date (half-open interval)
for (var m = moment(a); m.isBefore(b); m.add(1, 'days')) {
console.log(m.format('YYYY-MM-DD'));
}
// If you want an inclusive end date (fully-closed interval)
for (var m = moment(a); m.diff(b, 'days') <= 0; m.add(1, 'days')) {
console.log(m.format('YYYY-MM-DD'));
}
嗯...這看起來很像你在你自己的答案已經寫的代碼。 Moment.js是一個更受歡迎的圖書館,擁有大量的功能,但是我不知道哪一個更好?也許你可以測試並讓我們知道。 :)
但這些都不如喬達倍。爲此,您需要一個在JavaScript中實現TZDB的庫。我列出了some of those here。一般來說,請注意problems with JavaScript dates。這也會影響NodeJS。
1
使用https://github.com/JerrySievert/node-date-utils框架,那麼你就可以輕鬆地重複這樣的:
require('date-utils');
var d = new Date('2013-01-01');
var e = new Date('2013-06-01');
for(var i = d; i.isBefore(e); i.addDays(1)) {
console.log(i.toFormat("YYYY-MM-DD"));
}
19
我會建議改變馬特先前的迴應。他的代碼將在a
對象上導致突變。試試這個...
var moment = require('moment');
var a = moment('2013-01-01');
var b = moment('2013-06-01');
for (var m = moment(a); m.isBefore(b); m.add('days', 1)) {
console.log(m.format('YYYY-MM-DD'));
}
+0
好抓!我錯過了。 –
0
儘管有很多這方面的實用程序,但它們可能會很麻煩,以便集成到有用的循環中以檢查數據。
這應該可以做到。這可能是矯枉過正,但你可以很容易地使這個更多的論據。
var moment = require('moment');
var _ = require('lodash');
function(collectionsWithDateValues){
var slots = [];
var hours = {
start: 7, // 7am
end: 21, // 9pm
window: 2 // How long each item should be slotted for.
};
var rightNow = moment().add(0, 'days').hours(hours.start).minute(0).second(0);
var cutoff = moment(rightNow).add(14,'days'); // Check the next 2 weeks.
for(rightNow ; rightNow.isBefore(cutoff) ; rightNow.add(hours.window, 'hours')){
// Check if we're going beyond the daily cutoff, go to the next day
if(rightNow.isAfter(moment(rightNow).hour(hours.end))){
rightNow.add(1, 'days').hour(hours.start);
}
var foundClash = false;
_.forEach(collectionsWithDateValues, function(item){
// Check if the item is within now and the slotted time
foundClash = moment(item.date).isBetween(rightNow, moment(rightNow).add(hours.window, 'hours').subtract(1, 'minutes').seconds(59));
});
if(!foundClash){
slots.push(rightNow.toString());
}
}
return slots;
}
相關問題
- 1. Lua的遍歷日期範圍
- 2. 遍歷範圍
- 3. asp.net日曆日期範圍
- 4. 遍歷Excel範圍
- 5. 在列中遍歷範圍
- 6. RoR |未遍歷多個月的日期範圍
- 7. 遍歷日期
- 8. PHP:在日期範圍內遍歷所有月份?
- 9. 遍歷日期時間範圍在Django模板
- 10. JSON日期範圍從jQuery日曆
- 11. 在SQL中編寫函數以遍歷UDF中的日期範圍
- 12. jQuery日曆日期範圍第二個日曆+5天的分日期
- 13. 日期範圍的日期範圍之間的任何日期
- 14. 在日期範圍範圍
- 15. 對於日期範圍,solr中的查詢日期範圍
- 16. 日期範圍
- 17. 日期範圍
- 18. 日期範圍
- 19. 循環遍歷逐行的範圍
- 20. 更快的方式來遍歷範圍
- 21. 不能遍歷範圍內的輸入
- 22. 如何遍歷指定的範圍
- 23. 遍歷日期來查找日期
- 24. Java中的日期範圍
- 25. SQL中的日期範圍
- 26. PostgreSQL中的日期範圍
- 27. LUIS中的日期範圍
- 28. 從另一個範圍遍歷範圍內的對象?
- 29. 如何在角度 - 日曆日曆中獲取可見日期範圍
- 30. Struts:在日曆中突出顯示日期範圍(JQuery/Javascript)
我第二次超過date-utils – film42
感謝您的指點! – nwaltham
時刻2.10 m.add(1,'days')作爲for循環的增量部分。 – avances123