#javascript #reactjs #date #momentjs
Вопрос:
В моем проекте react мне нужно рассчитать количество дней, оставшихся между двумя датами.То есть я просто хочу посчитать, сколько дней осталось с сегодняшнего дня до истечения срока годности.Затем я хочу рассчитать процент от оставшихся дней и в соответствии с этим я хочу найти цену.
То есть у меня есть план, ежемесячная стоимость которого составляет 500 долларов.Если клиент купил его в середине месяца, то есть, если осталось 15 дней, то цена за план должна составлять 50% от ежемесячной платы.Как мудрый.
то, что я сделал, это:
const currentExpiry = license.current.expiry,//this is like 2021-08-01T10:23:18.275Z
now = moment(),
periodEnd = moment(currentExpiry);
const daysRemaining = now.diff(periodEnd, "days");
console.log("daysRemaining", daysRemaining);//here getting like -9
Как мне рассчитать этот процент?
Комментарии:
1. Приведенный вами код приводит к 428, а не -9 … что имеет смысл, так как 20 мая 2020 года определенно в прошлом
2. @Браво, извини, это моя вина. теперь я отредактировал код. Пожалуйста, проверьте
3. Чтобы рассчитать процент, вам нужна общая сумма. Учитывая то, что вы опубликовали, какова будет эта общая сумма?
Ответ №1:
Я думаю, что это возможное решение
const currentExpiry = '2021-08-01T10:23:18.275Z'; //this is like 2021-08-01T10:23:18.275Z
const now = moment();
const periodEnd = moment(currentExpiry);
const costMonth = 500;
const daysRemaining = Math.abs(now.diff(periodEnd, "days"));
const daysOfMonth = moment().endOf('month').format('DD');
const cost = (costMonth / daysOfMonth * daysRemaining).toFixed(2);
console.log(`For ${daysRemaining} remaing days the cost is of ${cost}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
Ответ №2:
const currentExpiry = license.current.expiry;
now = moment();
periodEnd = moment(currentExpiry);
daysRemaining = Math.abs(now.diff(periodEnd, "days"));
daysOfMonth = moment().endOf('month').format('DD');
percentageOfRemainingDays = (daysRemaining / daysOfMonth) * 100;
console.log(`Remaining days :${daysRemaining} and percentage of remaining days :${percentageOfRemainingDays}`);
Ответ №3:
Оставшаяся часть (end - now) ÷ (end - start)
-это та часть, где различия выражены в днях. Умножение платы на часть дает пропорциональную плату.
let today = moment().startOf('day');
let start = today.clone().startOf('month');
// To exclude last day of month in prorata fee
let end = today.clone().endOf('month');
// To include last day of month in prorata fee
// let end = start.clone().add(1, 'month');
let fee = 500;
let proRataFee = end.diff(today, 'days') / end.diff(start, 'days') * 500;
let f = 'ddd DD MMM';
console.log('Start : ' start.format(f)
'nEnd : ' end.format(f)
'nFee : ' '
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
Это вернет полную стоимость 1-го числа месяца и 0 долларов США в последний день месяца. Если вы также хотите взимать плату за последний день, сделайте конец началом следующего месяца.
`);
Ответ №2:
Ответ №3:
Оставшаяся часть (end - now) ÷ (end - start)
-это та часть, где различия выражены в днях. Умножение платы на часть дает пропорциональную плату.
Это вернет полную стоимость 1-го числа месяца и 0 долларов США в последний день месяца. Если вы также хотите взимать плату за последний день, сделайте конец началом следующего месяца.
fee
'nToday : ' today.format(f)
'nPro rata: ' '
Это вернет полную стоимость 1-го числа месяца и 0 долларов США в последний день месяца. Если вы также хотите взимать плату за последний день, сделайте конец началом следующего месяца.
`);
Ответ №2:
Ответ №3:
Оставшаяся часть (end - now) ÷ (end - start)
-это та часть, где различия выражены в днях. Умножение платы на часть дает пропорциональную плату.
Это вернет полную стоимость 1-го числа месяца и 0 долларов США в последний день месяца. Если вы также хотите взимать плату за последний день, сделайте конец началом следующего месяца.
proRataFee.toFixed(2)
);
Это вернет полную стоимость 1-го числа месяца и 0 долларов США в последний день месяца. Если вы также хотите взимать плату за последний день, сделайте конец началом следующего месяца.
`);
Ответ №2:
Ответ №3:
Оставшаяся часть (end - now) ÷ (end - start)
-это та часть, где различия выражены в днях. Умножение платы на часть дает пропорциональную плату.
Это вернет полную стоимость 1-го числа месяца и 0 долларов США в последний день месяца. Если вы также хотите взимать плату за последний день, сделайте конец началом следующего месяца.