Datetime 获取颤振/飞镖中的上个月日期

Datetime 获取颤振/飞镖中的上个月日期,datetime,dart,flutter,Datetime,Dart,Flutter,在flutter中,我们可以使用此 var now = new DateTime.now(); var formatter = new DateFormat('MM'); String month = formatter.format(now); 但是如何得到最后一个月的日期呢?特别是如果当前日期为1月(01日)。当我们使用操作数负(-)时,我们不能得到正确的月份,比如月份-1 您可以使用 var prevMonth = new DateTime(date.year, date.month -

在flutter中,我们可以使用此

var now = new DateTime.now();
var formatter = new DateFormat('MM');
String month = formatter.format(now);
但是如何得到最后一个月的日期呢?特别是如果当前日期为1月(01日)。当我们使用操作数负(-)时,我们不能得到正确的月份,比如月份-1

您可以使用

var prevMonth = new DateTime(date.year, date.month - 1, date.day);

你得到

2017-12-13

在进行日期计算之前,通常最好先转换为UTC,然后再转换回本地日期/时间,以避免夏令时和时区的问题。

我们可以使用减法获得过去的月份日期

DateTime pastMonth = DateTime.now().subtract(Duration(days: 30));

除了Günter Zöchbauer回答

var now = new DateTime.now();
    String g = ('${now.year}/ ${now.month}/ ${now.day}');
    print(g);
试试这个软件包,它使用了语法。见下文

Jiffy().subtract(months: 1);
其中
Jiffy()
立即返回日期。您还可以执行以下操作,得到相同的结果

var now = DateTime.now();
Jiffy(now).subtract(months: 1);

日期很难计算。这里有一个公开的提案,支持增加年数和月数

在“a”中添加月份和年份存在语义问题 “月”和“年”并不是一个具体的时间量。年复一年 天,月,最多三天。将“一个月”添加到 一月是模棱两可的。我们能做到,我们只需要挑选一些 2月27日至3月2日之间的任意一天。 这就是为什么我们没有将月份和年份添加到持续时间中——它们没有 描述持续时间

您可以使用下面的代码以任意方式添加月份(我认为它不完全准确。摘自本期)


我们可以计算每月的第一天和最后一天:

DateTime firstDayCurrentMonth = DateTime.utc(DateTime.now().year, DateTime.now().month, 1);

DateTime lastDayCurrentMonth = DateTime.utc(DateTime.now().year,DateTime.now().month+1,).subtract(Duration(days: 1));

DateTime.utc
采用整数值作为参数:int-year、int-month、int-day等等。

如果您只需要月份,建议使用
DateTime(date.year、date.month-1,1)
。如果您使用
date.day
您可能会在3月31日出现溢出。对于“3月31日前一个月的哪一天”没有明显的答案,不同的用例需要不同的答案(但3月3日通常不是任何人想要的:微笑:)。要获取上个月的最后一天,请使用
DateTime(date.year,date.month,0)
。很好的解释。我将使用它来获取当前月份的最后日期?为下个月的第一天创建一个日期,然后减去一天。这在任何给定月份的31日都不起作用……而且在2月份,它可以追溯到两个月前。
const _daysInMonth = const [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

bool isLeapYear(int value) =>
    value % 400 == 0 || (value % 4 == 0 && value % 100 != 0);

int daysInMonth(int year, int month) {
  var result = _daysInMonth[month];
  if (month == 2 && isLeapYear(year)) result++;
  return result;
}

DateTime addMonths(DateTime dt, int value) {
  var r = value % 12;
  var q = (value - r) ~/ 12;
  var newYear = dt.year + q;
  var newMonth = dt.month + r;
  if (newMonth > 12) {
    newYear++;
    newMonth -= 12;
  }
  var newDay = min(dt.day, daysInMonth(newYear, newMonth));
  if (dt.isUtc) {
    return new DateTime.utc(
        newYear,
        newMonth,
        newDay,
        dt.hour,
        dt.minute,
        dt.second,
        dt.millisecond,
        dt.microsecond);
  } else {
    return new DateTime(
        newYear,
        newMonth,
        newDay,
        dt.hour,
        dt.minute,
        dt.second,
        dt.millisecond,
        dt.microsecond);
  }
}
DateTime firstDayCurrentMonth = DateTime.utc(DateTime.now().year, DateTime.now().month, 1);

DateTime lastDayCurrentMonth = DateTime.utc(DateTime.now().year,DateTime.now().month+1,).subtract(Duration(days: 1));