// 时间显示,刚刚,x分钟前
String messageTime(timeStamp){
// 当前时间
int time = (new DateTime.now().millisecondsSinceEpoch / 1000).round();
// 对比
int _distance = time - timeStamp;
if(_distance <= 60){
return '刚刚';
}else if(_distance <= 3600){
return '${(_distance / 60).floor()}分钟前';
}else if(_distance <= 43200){
return '${(_distance / 60 / 60).floor()}小时前';
}else if(DateTime.fromMillisecondsSinceEpoch(time*1000).year == DateTime.fromMillisecondsSinceEpoch(timeStamp*1000).year){
return '${CustomStamp_str(Timestamp: timeStamp, Date: 'MM/DD hh:mm', toInt: false)}';
}else{
return '${CustomStamp_str(Timestamp: timeStamp, Date: 'YY/MM/DD hh:mm', toInt: false)}';
}
}
我这边的产品需求是少于60秒显示刚刚,1小时内显示x分钟,超出1小时就显示完整时间格式;
时间戳转时间格式封装如下:
// 时间戳转时间
String CustomStamp_str({
int Timestamp, // 为空则显示当前时间
String Date, // 显示格式,比如:'YY年MM月DD日 hh:mm:ss'
bool toInt = true, // 去除0开头
}){
if(Timestamp == null){
Timestamp = (new DateTime.now().millisecondsSinceEpoch / 1000).round();
}
String Time_str = (DateTime.fromMillisecondsSinceEpoch(Timestamp * 1000)).toString();
dynamic Date_arr = Time_str.split(' ')[0];
dynamic Time_arr = Time_str.split(' ')[1];
String YY = Date_arr.split('-')[0];
String MM = Date_arr.split('-')[1];
String DD = Date_arr.split('-')[2];
String hh = Time_arr.split(':')[0];
String mm = Time_arr.split(':')[1];
String ss = Time_arr.split(':')[2];
ss = ss.split('.')[0];
// 去除0开头
if(toInt){
MM = (int.parse(MM)).toString();
DD = (int.parse(DD)).toString();
hh = (int.parse(hh)).toString();
mm = (int.parse(mm)).toString();
}
if(Date == null){
return Time_str;
}
Date = Date.replaceAll('YY', YY)
.replaceAll('MM', MM)
.replaceAll('DD', DD)
.replaceAll('hh', hh)
.replaceAll('mm', mm)
.replaceAll('ss', ss);
return Date;
}
可以根据需要编辑Date,不需要的可以不写。
CustomStamp_str(Date: 'YY年MM月DD日 hh:mm:ss'); // "xx年xx月xx日 xx:xx:xx"
CustomStamp_str(Date: 'YY/MM/DD/ hh:mm'); // "xx/xx/xx/ xx:xx"
CustomStamp_str(Date: 'hh:mm'); // "xx:xx"
|