|
import 'package:intl/intl.dart' as intl; |
|
import 'dart:async'; |
|
import 'dart:html'; |
|
|
|
DateTime now = new DateTime.now(); |
|
DateTime minusMinute = now.subtract(new Duration(minutes:1)); |
|
DateTime minusHour = now.subtract(new Duration(hours:1)); |
|
DateTime minusDay = now.subtract(new Duration(hours:24)); |
|
DateTime minusWeek = now.subtract(new Duration(days:7)); |
|
DateTime minusYear = now.subtract(new Duration(days:365)); |
|
DivElement output = querySelector('div'); |
|
|
|
main() { |
|
new Timer.periodic(new Duration(seconds:1), (_) => |
|
output.setInnerHtml(template, validator: new TrustedNodeValidator()) |
|
); |
|
} |
|
|
|
String get template => |
|
''' |
|
${formatDate(now)}<br> |
|
${formatDate(minusMinute)}<br> |
|
${formatDate(minusHour)}<br> |
|
${formatDate(minusDay)}<br> |
|
${formatDate(minusWeek)}<br> |
|
${formatDate(minusYear)}<br> |
|
'''; |
|
|
|
String formatDate(DateTime date) { |
|
Duration difference = new DateTime.now().difference(date); |
|
int days = difference.inDays; |
|
int hours = difference.inHours; |
|
int minutes = difference.inMinutes; |
|
int seconds = difference.inSeconds; |
|
|
|
if (days < 7 && hours >= 24) { |
|
return '$days day ago'; |
|
} |
|
if (hours < 24 && minutes >= 60) { |
|
return '$hours hours ago'; |
|
} |
|
if (minutes < 60 && seconds >= 60) { |
|
return '$minutes minutes ago'; |
|
} |
|
if (seconds < 60) { |
|
return '$seconds seconds ago'; |
|
} |
|
return new intl.DateFormat("MMM d ''yy 'at' HH:mm").format(date); |
|
} |
|
|
|
/// A [NodeValidator] which allows everything. |
|
class TrustedNodeValidator implements NodeValidator { |
|
bool allowsElement(Element element) => true; |
|
bool allowsAttribute(element, attributeName, value) => true; |
|
} |