获取Flutter / Dart的上个月日期

时间:2018-07-19 10:40:34

标签: datetime dart flutter

在扑朔迷离中,我们可以使用此月

var now = new DateTime.now();
var formatter = new DateFormat('MM');
String month = formatter.format(now);

但是如何获取上个月的日期?特别是如果当前日期是一月(01)。当我们使用操作数减(-)时,例如月份-1,我们将无法获得正确的月份。

6 个答案:

答案 0 :(得分:3)

您可以使用

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

使用

var date = new DateTime(2018, 1, 13);

您得到

2017-12-13

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

答案 1 :(得分:1)

尝试使用Jiffy这个软件包,它使用了momentjs语法。见下文

Jiffy().subtract(months: 1);

Jiffy()现在返回日期的位置。您还可以执行以下相同的结果

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

Jiffy尊重the年以及每个years年有多少天   月

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

除了GünterZöchbauer答案

var now = new DateTime.now();
    String g = ('${now.year}/ ${now.month}/ ${now.day}');
    print(g);

答案 4 :(得分:0)

日期很难计算。在https://github.com/dart-lang/sdk/issues/27245处有一个开放的建议,以增加增加的年限和月份。

在语义上存在一个问题,即添加“ 一个月”和“一年”不是特定的时间段。 一天,最多三个月。将“一个月”添加到第30个 一月是big昧的。我们可以做到,我们只需要挑选一些 2月27日至3月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);
  }
}

答案 5 :(得分:0)

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

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

DateTime.utc以整数值作为参数:整数年,整数月,整数日等。