Skip to content

Instantly share code, notes, and snippets.

Created November 25, 2016 23:30
Show Gist options
  • Save anonymous/a3e887960238c0acfbf69f7d552f1936 to your computer and use it in GitHub Desktop.
Save anonymous/a3e887960238c0acfbf69f7d552f1936 to your computer and use it in GitHub Desktop.
calendar-proof-concept
void main() {
var now = new DateTime(2013, 1, 10);
var year = now.year;
var month = now.month;
DateTime firstDay = new DateTime(year, month, 1);
DateTime lastDay = new DateTime(year, month + 1, 0);
List<Day> monthDays = new List<Day>();
for (var i = firstDay.day; i <= lastDay.day; i++) {
monthDays.add(new Day(date: new DateTime(year, month, i)));
}
// INFO: build month padding - beginning
var firstWeekday = firstDay.weekday;
DateTime lastDayPrevMonth = new DateTime(year, month, 0);
if (firstWeekday < 7) {
for (var i = 0; i < firstWeekday; i++) {
monthDays.insert(
0,
new Day(date: new DateTime(year, month - 1, lastDayPrevMonth.day - i))
);
}
}
// INFO: build month padding - ending
var lastWeekday = lastDay.weekday;
DateTime firstDayNextMonth = new DateTime(year, month + 1, 1);
var remainingDays = (6 - lastWeekday == -1) ? 6 : (6 - lastWeekday);
for (var i = 0; i < remainingDays; i++) {
monthDays.add(
new Day(date: new DateTime(year, month + 1, firstDayNextMonth.day + i))
);
}
// CONSOLE LOG TESTING
monthDays.forEach((day) => day.showDate());
print("count: " + monthDays.length.toString());
// INFO: generate weeks in this month
List<Week> monthWeeks = new List<Week>();
for (var weeknum = 0; weeknum < (monthDays.length / 7); weeknum++) {
print("weeknum: " + weeknum.toString());
List<Day> weekDays = new List<Day>();
for (var weekday = (weeknum * 7); weekday < (weeknum * 7) + 7; weekday++) {
print("weekday: " + weekday.toString());
weekDays.add(monthDays[weekday]);
}
monthWeeks.add(new Week(days: weekDays));
}
Month currentMonth = new Month(year: year, month: month, weeks: monthWeeks);
print(Month.days[0]['short']);
}
class Day {
Day({ DateTime this.date });
DateTime date;
showDate() => print(date.month.toString() + ": " + date.day.toString());
}
class Week {
Week({ List<Day> this.days });
List<Day> days;
}
class Month {
Month({ int this.year, int this.month, List<Week> weeks });
int year;
int month;
List<Week> weeks;
static final days = {
0: { 'short': 'Mon', 'long' : 'Monday' },
1: { 'short': 'Tue', 'long': 'Tuesday' },
2: { 'short': 'Wed', 'long': 'Wednesday' },
3: { 'short': 'Thur', 'long': 'Thursday' },
4: { 'short': 'Fri', 'long': 'Friday' },
5: { 'short': 'Sat', 'long': 'Saturday' },
6: { 'short': 'Sun', 'long': 'Sunday' }
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment