Dart/Flutter : Conversion d'horodatage

Je ne pouvais pas trouver une solution à cela, je suis en saisissant les données de firebase et l'un des champs est un timestamp qui ressemble à ça -> 1522129071. Comment convertir une date?

Swift exemple (travaux) :

func readTimestamp(timestamp: Int) {
    let now = Date()
    let dateFormatter = DateFormatter()
    let date = Date(timeIntervalSince1970: Double(timestamp))
    let components = Set<Calendar.Component>([.second, .minute, .hour, .day, .weekOfMonth])
    let diff = Calendar.current.dateComponents(components, from: date, to: now)
    var timeText = ""

    dateFormatter.locale = .current
    dateFormatter.dateFormat = "HH:mm a"

    if diff.second! <= 0 || diff.second! > 0 && diff.minute! == 0 || diff.minute! > 0 && diff.hour! == 0 || diff.hour! > 0 && diff.day! == 0 {
        timeText = dateFormatter.string(from: date)
    }
    if diff.day! > 0 && diff.weekOfMonth! == 0 {
        timeText = (diff.day == 1) ? "\(diff.day!) DAY AGO" : "\(diff.day!) DAYS AGO"
    }
    if diff.weekOfMonth! > 0 {
        timeText = (diff.weekOfMonth == 1) ? "\(diff.weekOfMonth!) WEEK AGO" : "\(diff.weekOfMonth!) WEEKS AGO"
    }

    return timeText
}

Ma tentative de Dart:

String readTimestamp(int timestamp) {
    var now = new DateTime.now();
    var format = new DateFormat('HH:mm a');
    var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp);
    var diff = date.difference(now);
    var time = '';

    if (diff.inSeconds <= 0 || diff.inSeconds > 0 && diff.inMinutes == 0 || diff.inMinutes > 0 && diff.inHours == 0 || diff.inHours > 0 && diff.inDays == 0) {
      time = format.format(date); //Doesn't get called when it should be
    } else {
      time = diff.inDays.toString() + 'DAYS AGO'; //Gets call and it's wrong date
    }

    return time;
}

Et il retourne dates/heures qui sont waaaaaaay off.

Mise à JOUR:

String readTimestamp(int timestamp) {
    var now = new DateTime.now();
    var format = new DateFormat('HH:mm a');
    var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp * 1000);
    var diff = date.difference(now);
    var time = '';

    if (diff.inSeconds <= 0 || diff.inSeconds > 0 && diff.inMinutes == 0 || diff.inMinutes > 0 && diff.inHours == 0 || diff.inHours > 0 && diff.inDays == 0) {
      time = format.format(date);
    } else {
      if (diff.inDays == 1) {
        time = diff.inDays.toString() + 'DAY AGO';
      } else {
        time = diff.inDays.toString() + 'DAYS AGO';
      }
    }

    return time;
  }
  • Je vais supposer que votre timestamp est dans le mauvais format. Quel est votre timestamp int données ressembler? (Cela nous permettra de savoir si sa en quelques secondes. Millisecondes ou Microsecondes.
  • J'ai l'app pour ios en cours d'exécution sur mon téléphone et il indique la date formatée. En utilisant le même timestamp à partir de la même base de données c'est donner des valeurs étranges dans dart/flutter. Ça ressemble à ça -> 1522129071. REMARQUE** Tous les horodateurs sont pour une raison quelconque montrant que la même.
  • -> 1522129071 <- ???
  • Quand je prends qu'à partir de la base de données qu'il affiche correctement avec le code swift, mais dans dart il montre 19:25 PM où il faut montrer à 15:50 PM, il y a 2 semaines, 4 semaines, etc...
  • et pouvezvous en faire me montrer capture d'écran de firebase timestamp? êtes-vous à l'aide de type de données timestamp ou que vous venez de mettre millisecondes?
  • il y a option d'horodatage dans firestore. vous venez de passer DateTime comme aussi des données de votre requête.
  • 1527796211 est à quoi il ressemble généralement. Un int valeur de firebase.
  • À l'aide de la fonction de Base de données, pas Firestore.