27

我正在尝试新的 Google Dart 语言,但我不知道如何获取当月的最后一天?

这给了我当前日期:

var now = new DateTime.now();
4

5 回答 5

81

为下个月提供零天值会为您提供上个月的最后一天

var date = new DateTime(2013,3,0);
print(date.day);  // 28 for February
于 2013-02-11T15:25:51.510 回答
27

以一种简单的方式试试这个:

DateTime now = DateTime.now();
int lastday = DateTime(now.year, now.month + 1, 0).day;
于 2019-11-06T13:53:55.693 回答
19

这是找到它的一种方法:

var now = new DateTime.now();

// Find the last day of the month.
var beginningNextMonth = (now.month < 12) ? new DateTime(now.year, now.month + 1, 1) : new DateTime(now.year + 1, 1, 1);
var lastDay = beginningNextMonth.subtract(new Duration(days: 1)).day;

print(lastDay); // 28 for February

我有当前日期,所以我构造下个月的第一天,然后从中减去一天。我也考虑到了年份的变化。

更新:对于同一件事,这里有一些更短的代码,但受到 Chris 的零技巧的启发:

var now = new DateTime.now();

// Find the last day of the month.
var lastDayDateTime = (now.month < 12) ? new DateTime(now.year, now.month + 1, 0) : new DateTime(now.year + 1, 1, 0);

print(lastDayDateTime.day); // 28 for February

它有额外的检查/代码,以防您想以编程方式执行此操作(例如,您有一个特定的月份作为整数)。

于 2013-02-11T15:17:34.573 回答
3

另一种方法是使用Jiffy。它有endOf方法,可以轻松获取几个单位的最后时刻,在本例中为月份:

Jiffy().endOf(Units.MONTH);
于 2020-10-27T17:11:41.983 回答
2

这是一个可能有帮助的扩展。(参考 Kai 和 Chris 的回答。)

extension DateTimeExtension on DateTime {

  DateTime get firstDayOfWeek => subtract(Duration(days: weekday - 1));

  DateTime get lastDayOfWeek =>
      add(Duration(days: DateTime.daysPerWeek - weekday));

  DateTime get lastDayOfMonth =>
      month < 12 ? DateTime(year, month + 1, 0) : DateTime(year + 1, 1, 0);
}
于 2021-10-20T12:20:24.723 回答