Saya mencoba untuk mendapatkan semua bulan dari tanggal yang dibuat pengguna hingga 6 bulan mendatang. Misalkan pengguna dibuat pada Oktober 2020 maka saya memerlukan semua bulan dalam daftar dari Oktober 2020 hingga Januari 2021 (bulan berjalan) ditambah 6 bulan ke depan. Saya mencoba di bawah ini tetapi mendapatkan output yang salah.

static List<String> getMonthsInYear(){
  List<String> years=[];
  DateFormat dateFormat=DateFormat("MMM yyyy");
  DateTime createdDate = DateTime(2020,10,1,0,0,0,0,0);

  DateTime today = DateTime.now();
  var i=0,currentMonth=1;
  while(today.year==createdDate.year && today.month==createdDate.month){
    createdDate=DateTime(createdDate.year,createdDate.month+i,1,0,0,0,0,0);
    years.add(dateFormat.format(createdDate));
    i++;
  }
  while(currentMonth<7){
    createdDate=DateTime(createdDate.year,createdDate.month+currentMonth,1,0,0,0,0,0);
    years.add(dateFormat.format(createdDate));
    currentMonth++;
  }
  print("BLB createdDate ${years}");
  return years;
}

Output saya adalah [Nov 2020, Jan 2021, Apr 2021, Ags 2021, Jan 2022, Jul 2022].

Tapi saya ingin output saya menjadi [Okt 2020, Nov 2020, Des 2020, Jan 2021, Feb 2021, Mar 2021, Apr 2021, Mei 2021, Jun 2021] Ada yang bisa bantu saya.

0
BLB 7 Januari 2021, 16:39

3 jawaban

Jawaban Terbaik

Ini akan memberi Anda apa yang Anda inginkan:

static List<String> getMonthsInYear(DateTime userCreatedDate) {
    final dates = <String>[];
    final now = DateTime.now();
    final sixMonthFromNow = DateTime(now.year, now.month+6);
    DateTime date = userCreatedDate;

    while (date.isBefore(sixMonthFromNow)) {
      dates.add(dateFormat.format(date));
      date = DateTime(date.year, date.month+1);
    }
    return dates;
  }
}
1
dshukertjr 7 Januari 2021, 14:22

Ini akan memberi Anda apa yang Anda inginkan:

  static List<String> getMonthsInYear(DateTime userCreatedDate) {
    DateFormat dateFormat=DateFormat("MMM yyyy");

    return List.generate(6, (int index) {
      final date = DateTime(userCreatedDate.year, userCreatedDate.month + index);
      return dateFormat.format(date);
    });
  }
0
dshukertjr 7 Januari 2021, 13:56

Saya tidak tahu mengapa itu adalah hasil Anda selama 6 bulan ke depan.

[Okt 2020, Nov 2020, Des 2020, Jan 2021, Feb 2021, Mar 2021, Apr 2021, Mei 2021, Jun 2021]

Jika output yang Anda inginkan adalah ini

[Okt 2020, Nov 2020, Des 2020, Jan 2021, Feb 2021, Mar 2021]

Kodenya terlihat seperti ini:

  static List<String> getMonthsInYear(DateTime createdDate, int length){
    DateFormat dateFormat=DateFormat("MMM yyyy");

    List<String> years=[];

    int currentYear = createdDate.year;
    int currentMonth = createdDate.month;
    for(int i=0; i<length; i++) {
      createdDate=DateTime(currentYear, currentMonth + i);
      years.add(dateFormat.format(createdDate));

      if(currentMonth + i == 1) {
        currentYear += 1;
      }
    }
    return years;
  }

Kode penggunaan:

DateTime createdDate = DateTime(2020,10,1,0,0,0,0,0);
print(getMonthsInYear(createdDate, 6));
0
battlecook 7 Januari 2021, 14:09