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

时间:2014-04-26 08:47:24

标签: 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);

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

我使用的是intl包。

import' package:intl / intl.dart';

3 个答案:

答案 0 :(得分:1)

我认为没有内置功能。您可以格式化日期:

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

注意:如果您不想明确&#39; 01st&#39;一个d就足够了。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

尝试一下受Jiffy启发的momentjs软件包。

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

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

您还可以添加DateTime对象

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

免责声明:我创建了Jiffy包。