tajihiro
tajihiro

Reputation: 2443

How to convert Timestamp to DateTime from firebase with flutter

I have Timestamp item in firebase. I get the item from dart code timestamp type. It shows like 'Timestamp(seconds=1590903768, nanoseconds=26999000)' as it is.

I would like to show on my Application only Date like '2020-06-01' or '06-01'.

Please give me advice.

Upvotes: 9

Views: 18277

Answers (5)

Kamal Panara
Kamal Panara

Reputation: 695

You can convert the Timestamp DataType to DateTime and then format the DateTime according to your requirements.

Note: To make this code work, you must install the intl package in your Flutter project. and change the skeleton based on how you want to format it.

Example

add the following method in your dart file.

String formatTimestamp(Timestamp timestamp) {
  var format = new DateFormat('y-M-d'); // <- use skeleton here
  return format.format(timestamp.toDate());
}

then get the TimeStamp from FireStore and pass it into this method

print(formatTimestamp(doc.data['timestamp']));

OutPut

year-month-day

For other available formats, use Skeleton to format.

 ICU Name                   Skeleton
 --------                   --------
 DAY                          d
 ABBR_WEEKDAY                 E
 WEEKDAY                      EEEE
 ABBR_STANDALONE_MONTH        LLL
 STANDALONE_MONTH             LLLL
 NUM_MONTH                    M
 NUM_MONTH_DAY                Md
 NUM_MONTH_WEEKDAY_DAY        MEd
 ABBR_MONTH                   MMM
 ABBR_MONTH_DAY               MMMd
 ABBR_MONTH_WEEKDAY_DAY       MMMEd
 MONTH                        MMMM
 MONTH_DAY                    MMMMd
 MONTH_WEEKDAY_DAY            MMMMEEEEd
 ABBR_QUARTER                 QQQ
 QUARTER                      QQQQ
 YEAR                         y
 YEAR_NUM_MONTH               yM
 YEAR_NUM_MONTH_DAY           yMd
 YEAR_NUM_MONTH_WEEKDAY_DAY   yMEd
 YEAR_ABBR_MONTH              yMMM
 YEAR_ABBR_MONTH_DAY          yMMMd
 YEAR_ABBR_MONTH_WEEKDAY_DAY  yMMMEd
 YEAR_MONTH                   yMMMM
 YEAR_MONTH_DAY               yMMMMd
 YEAR_MONTH_WEEKDAY_DAY       yMMMMEEEEd
 YEAR_ABBR_QUARTER            yQQQ
 YEAR_QUARTER                 yQQQQ
 HOUR24                       H
 HOUR24_MINUTE                Hm
 HOUR24_MINUTE_SECOND         Hms
 HOUR                         j
 HOUR_MINUTE                  jm
 HOUR_MINUTE_SECOND           jms
 MINUTE                       m
 MINUTE_SECOND                ms
 SECOND                       s

I hope this will be helpful!!

Upvotes: 4

krishnaacharyaa
krishnaacharyaa

Reputation: 24920

There are different ways to convert TimeStamp to DateTime which differs based on the scenario. I have summarize all the possible ways, Pick the one which suits your case !!


Conversion of Firebase timestamp to DateTime:

  1. document['timeStamp'].toDate()
    
  2. (document["timeStamp"] as Timestamp).toDate()
    
  3. DateTime.fromMillisecondsSinceEpoch(document['timeStamp'].millisecondsSinceEpoch);
    
  4. Timestamp.fromMillisecondsSinceEpoch(document['timeStamp'].millisecondsSinceEpoch).toDate();
    
  5. If timeStamp is in microseconds use:

    DateTime.fromMicrosecondsSinceEpoch(timestamp * 1000000);
    
  6. If timeStamp is in milliseconds use:

    DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
    
  7. Add the following function in your dart file.

     String formatTimestamp(Timestamp timestamp) {
       var format = new DateFormat('yyyy-MM-dd'); // <- use skeleton here
       return format.format(timestamp.toDate());
     }
    

    call it as formatTimestamp(document['timestamp'])

Upvotes: 0

Pranav Dave
Pranav Dave

Reputation: 804

If you want Hours and minutes(hh:mm) from timestamp, Simply create following method which gives you string in return.

String convertTimestampToHm(Timestamp timestamp) {
var format = DateFormat('Hm'); // convert into hours and minutes
return format.format(timestamp.toDate());

}

NOTE: - You can always use Skeleton base on requiremrnt.

Upvotes: 0

Blacksmith
Blacksmith

Reputation: 762

You get back a map from firestore. Assuming you have named it "creationDate", you can convert the returned timestamp to a DateTime object using the toDate() dart function. The "simplest" way to format the datetime is to use the intl package

// Map From firestore
Map data = documentSnapshot.data();
var creationDate = data['creationDate'].toDate();

//Format using intl package
DateFormat _dateFormat = DateFormat('y-MM-d');
String formattedDate =  _dateFormat.format(dateTime);

Upvotes: 1

Christopher Moore
Christopher Moore

Reputation: 17123

Timestamp class has a toDate function that converts it to a DateTime object. See this for more information. Any formatting you want to do in converting it to a string can be done more easily now with intl package formatters.

Example:

Timestamp stamp = Timestamp.now();
DateTime date = stamp.toDate();

Upvotes: 19

Related Questions