Flutter : Convert Integer To Month

4,872

Solution 1

Is this you want ?

replace month with you month int value

DateFormat('MMMM').format(DateTime(0, month))

Value: January,Feburary ...

Solution 2

DateFormat.MMMM().format(date)

Simple and allows future localization. You can put your locale inside of .MMMM(). This is the best and most scalable solution.

Solution 3

const Map<int,String> monthsInYear = {
 1: "January",
 2: "February",
 3: "March",
 4: “April”,
 5: “May”,
 6: “June”
 …
 12: "December"
}

In Your ListView

ListView.separated(
        separatorBuilder: (ctx, index) => Divider(),
        itemCount: 12,
        shrinkWrap: true,
        itemBuilder: (BuildContext context, int index) {
          final indexOrder = index + 1;
          final result = listTest[index];
          listTest.sort((a, b) => a.month.compareTo(b.month));
          return InkWell(
            onTap: () => showDialog(
              context: context,
              builder: (ctxDialog) => FormElectricTenant(),
            ),
            child: Padding(
              padding: const EdgeInsets.symmetric(vertical: 8.0),
              child: Row(
                children: <Widget>[
                  titleHeaderRow(title: '$indexOrder' ?? '0'),
                  titleHeaderRow(title: '${monthsInYear[result.month]}' ?? '---'),
                  titleHeaderRow(title: '${result.value}' ?? '0'),
                ],
              ),
            ),
          );
        },
      );
Share:
4,872
Zeffry Reynando
Author by

Zeffry Reynando

Learning PHP , SQL , Dart

Updated on December 18, 2022

Comments

  • Zeffry Reynando
    Zeffry Reynando 18 minutes

    I have Model and Dummy Data To testing like this :

    Model

    
    class TestingLoopingModel {
      String id;
      int month;
      int year;
      int value;
      TestingLoopingModel({
        this.id,
        this.month,
        this.year,
        this.value,
      });
    }
    

    Dummy Data

    
    List<TestingLoopingModel> listTest = [
      //TODO Month 12 And 10 is not exist
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 2,
        year: 2020,
        value: 2000,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 4,
        year: 2020,
        value: 1500,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 6,
        year: 2020,
        value: 3000,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 8,
        year: 2020,
        value: 3500,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 1,
        year: 2020,
        value: 5000,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 3,
        year: 2020,
        value: 4500,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 5,
        year: 2020,
        value: 2111,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 7,
        year: 2020,
        value: 5555,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 9,
        year: 2020,
        value: 333,
      ),
      TestingLoopingModel(
        id: DateTime.now().toString(),
        month: 11,
        year: 2020,
        value: 2222,
      ),
    ];
    

    I want Month in my listTest convert to Month Name Something Like January,Feburary,March,April,Mei,etc.... How can i do this ?

    I know i can use this Intl Packages like this DateFormat.MMMM().format(???); But format required DateTime and in my list Month is integer.

    Thank's

    View

    SizedBox(
                  height: sizes.height(context) / 1.7,
                  child: ListView.separated(
                    separatorBuilder: (ctx, index) => Divider(),
                    itemCount: 12,
                    shrinkWrap: true,
                    itemBuilder: (BuildContext context, int index) {
                      final indexOrder = index + 1;
                      final result = listTest[index];
                      listTest.sort((a, b) => a.month.compareTo(b.month));
                      return InkWell(
                        onTap: () => showDialog(
                          context: context,
                          builder: (ctxDialog) => FormElectricTenant(),
                        ),
                        child: Padding(
                          padding: const EdgeInsets.symmetric(vertical: 8.0),
                          child: Row(
                            children: <Widget>[
                              titleHeaderRow(title: '$indexOrder' ?? '0'),
                              titleHeaderRow(title: '${result.month}' ?? '0'),
                              titleHeaderRow(title: '${result.value}' ?? '0'),
                            ],
                          ),
                        ),
                      );
                    },
                  ),
                ),
    

    enter image description here

    • Gaurav Mall
      Gaurav Mall over 2 years
      Did you try creating a new DateTime object and changing its month?
  • Thepeanut over 2 years
    Or you could have gone the easy way, with const months = <String>[ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', ]; and something like print(months[0]) (or print(months[model.month - 1]) in your case) to show it's name.
  • Zeffry Reynando
    Zeffry Reynando over 2 years
    In my case , month from my database is integer like 1,2,3,4,5 Not like you said. So i should convert it from integer to Month Name
  • Thepeanut over 2 years
    You don't need to convert anything. Lists start with index 0, so 0 - is Jan, 1 - Feb and so on. For example - you just use months(0) to get Jan.
  • RukshanJS
    RukshanJS over 1 year
    This is just great. Thanks. Also, if anyone wants an abbreviated format like "Jan", "Feb" etc., you can put three Ms like DateFormat('MMM').format(DateTime(0, month))