Способ сделать это - использовать кортеж и деконструкцию, чтобы разрешить несколько присвоений в одном выражении:
public class Person
{
public string Name { get; }
public int Age { get; }
public Person(string name, int age) => (Name, Age) = (name, age);
}
Начиная с C # 7.1 (представленного с помощью Visual Studio 2017 Update 3), компилятор код теперь оптимизирует фактическую конструкцию и деконструкцию кортежа. Таким образом, этот подход не имеет накладных расходов на производительность по сравнению с назначением «longhand».
Проблема заключается в том, что каждый месяц может иметь различное количество дней в них. Вопрос заключается в том, что вы делаете, когда хотите увеличить дату на 1 месяц. В документации на PHP, если вы на 31 января (или 30), и вы добавляете 1 месяц, каково ожидаемое поведение?
В феврале всего 29 дней. Вы хотите установить последний день месяца? Вы, как правило, более безопасно увеличиваетесь на определенное количество дней, если это то, что вы ищете, или статическую дату, основанную на текущей дате. Не зная, чего вы пытаетесь достичь, когда вы увеличиваете свой месяц, трудно сказать, как смотреть за ошибкой.
РЕДАКТИРОВАТЬ: Как упоминает кто-то в подобной записи, прокомментированной Майком Б выше, вы, вероятно, хотите сделать что-то там, где вы (в псевдокоде):
1) Use cal_days_in_month() for the next month and save that number to a variable x
2) If x >= current billing DOB, increment and be done
3) DateTime::modify('last day') (havent used this before but something along these lines) to set the date to the last date of the next month (set it to the 1st of the next month, then last day?)
Стоит отметить, что если вы используете переменную здесь как новое платежное значение, вы уничтожите свое исходное значение. Я бы сохранил дополнительное значение DB, которое является «первой датой выставления счетов» или просто «billing_day_of_month» или что-то еще, и используйте это, чтобы определить день месяца, который вы должны смотреть на
Если ваша цель состоит в том, чтобы строго увеличивать удобные для пользователя месяцы (таким образом, 3 месяца с 21 января должны быть 21 апреля), за исключением того, что сокращаются сроки членства в месяц (таким образом, 1 месяц с 31 января составляет 28 февраля / 29), вам нужно вернуться всего несколько дней, если вы перейдете в следующий месяц:
function addMonths($date,$months) {
$orig_day = $date->format("d");
$date->modify("+".$months." months");
while ($date->format("d")<$orig_day && $date->format("d")<5)
$date->modify("-1 day");
}
$d = new DateTime("2000-01-31");
addMonths($d,1);
echo $d->format("Y-m-d"); // 2000-02-29