在 dart 中,如何格式化一个月中的哪一天来表示“11号”、“21号”或“23号”?

jmo0nnb3  于 2023-03-15  发布在  其他
关注(0)|答案(4)|浏览(154)

我有一个日期,希望显示带有后缀th、st、rd等的日期。
这是我的 dart 密码。

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);

例如,这将日期显示为“2014年4月23日星期三”,但我需要“2014年4月23日星期三”。
我用的是intl软件包。
导入“包:国际/国际. dart”;

qvsjd97n

qvsjd97n1#

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';
    }
}

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

'$day ${getDayOfMonthSuffix(day)}'
w1e3prcc

w1e3prcc2#

试试这个软件包Jiffy,它的灵感来自momentjs
只需添加do日期模式即可。

Jiffy.parseFromList([2014, 4, 23]).format("EEEE MMMM do, yyyy"); // Wednesday April 23rd, 2014

还可以添加DateTime对象

Jiffy.parseFromDateTime(DateTime(2014, 4, 23)).format("EEEE MMMM do, yyyy"); // Wednesday April 23rd, 2014
zu0ti5jz

zu0ti5jz3#

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

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);
}

注意:如果您不想显式显示“01st”,一个d就足够了。

xzlaal3s

xzlaal3s4#

可能不会更好...但更短

static final _dayMap = {1: 'st', 2: 'nd', 3: 'rd'};
static String dayOfMonth(int day) => "$day${_dayMap[day] ?? 'th'}";

相关问题