在Dart中,您如何将月份中的日期格式化为“ 11日”,“ 21日”或“ 23日”?

Phi*_*hil 6 date internationalization dart

我有一个日期,想要显示带后缀th,st,rd等的日期。

这是我的飞镖代码。

int year = date.year;
int month = date.month;
int day = date.day;

DateTime dateSelected = new DateTime(year, month, day);
var formatter = new DateFormat('EEEE MMMM dd, yyyy');
displayDate = formatter.format(dateSelected);
Run Code Online (Sandbox Code Playgroud)

例如,日期显示为“ 2014年4月23日星期三”,但我需要“ 2014年4月23日星期三”。

我正在使用intl包。

导入'package:intl / intl.dart';

Joh*_*thm 10

String getDayOfMonthSuffix(int dayNum) {
    if(!(dayNum >= 1 && dayNum <= 31)) {
      throw Exception('Invalid day of month');
    }

    if(dayNum >= 11 && dayNum <= 13) {
      return 'th';
    }

    switch(dayNum % 10) {
      case 1: return 'st';
      case 2: return 'nd';
      case 3: return 'rd';
      default: return 'th';
    }
}
Run Code Online (Sandbox Code Playgroud)

上述方法为您获取后缀。您可以使用字符串连接或字符串插值来组合您想要的格式。例如

String getDayOfMonthSuffix(int dayNum) {
    if(!(dayNum >= 1 && dayNum <= 31)) {
      throw Exception('Invalid day of month');
    }

    if(dayNum >= 11 && dayNum <= 13) {
      return 'th';
    }

    switch(dayNum % 10) {
      case 1: return 'st';
      case 2: return 'nd';
      case 3: return 'rd';
      default: return 'th';
    }
}
Run Code Online (Sandbox Code Playgroud)


lef*_*loh 6

我不认为有内置的功能。你可以这样格式化日期:

format(DateTime date) {
  var suffix = "th";
  var digit = date.day % 10; 
  if ((digit > 0 && digit < 4) && (date.day < 11 || date.day > 13)) {  
    suffix = ["st", "nd", "rd"][digit - 1];
  }
  return new DateFormat("EEEE MMMM d'$suffix', yyyy").format(date);
}
Run Code Online (Sandbox Code Playgroud)

注意:如果您不想显式地使用“01st”d就足够了。


Jam*_*med 6

试试这个受momentjs启发的包Jiffy

只需简单地添加do日期模式。见下文

Jiffy([2014, 4, 23]).format("EEEE MMMM do, yyyy"); // Wednesday April 23rd, 2014
Run Code Online (Sandbox Code Playgroud)

您还可以添加您的 DateTime 对象

Jiffy(DateTime(2014, 4, 23)).format("EEEE MMMM do, yyyy"); // Wednesday April 23rd, 2014
Run Code Online (Sandbox Code Playgroud)