Задать вопрос
@DevidAstil

Для каждого select option своя стоимость и время в пути. Как вывести время прибытия?

Есть скрипт который получает значения из option о времени отправки, каждая поездка занимает 50 мин, как мне вывести время прибытия? то бишь как ко времени отправки прибавить 50 мин?

Вот такой скрипт сейчас
const costAB = 700;
const costBA = 1200;
var travelTimeMinutes = 50;
const coll = document.getElementById('num');

const timesAB = `

`;

const timesBA = `

`;

const parseTimes = times => times
.trim()
.split('\n')
.map(str => new Date(str.trim()));

const datesAB = parseTimes(timesAB);
const datesBA = parseTimes(timesBA);

const el = Object.fromEntries(
[ 'direction', 'timesAB', 'timesBA', 'blockAB', 'blockBA', 'output' ]
.map(id => [id, document.getElementById(id)])
);

const oo = n => n.toString().padStart(2, '0');

const createOptions = (datesArray, id) => {
datesArray.forEach(time => {
const option = document.createElement('option');
option.value = time.getTime();
option.innerText = `${oo(time.getHours())}:${oo(time.getMinutes())}`;
el[id].appendChild(option);
});
};

// createOptions(datesAB, 'timesAB');
// createOptions(datesBA, 'timesBA');

const filterBAOptions = () => {
let latest = 0; // no limits
if (el.direction.value & 1) { // A->B active
latest = +el.timesAB.value + travelTimeMinutes * 6e4;
}
const isSelectionValid = +el.timesBA.value >= latest;
let isFixApplied = false;

el.timesBA.querySelectorAll('option').forEach(opt => {
if (+opt.value < latest) {
opt.setAttribute('disabled', 'disabled');
} else {
opt.removeAttribute('disabled');
if (!isSelectionValid && !isFixApplied) {
el.timesBA.value = opt.value;
isFixApplied = true;
}
}
});
};

const onDirectionChange = () => {
const bits = +el.direction.value;
el.blockAB.classList[bits & 1 ? 'remove' : 'add']('hidden');
el.blockBA.classList[bits & 2 ? 'remove' : 'add']('hidden');
};

const updateTimes = () => {
const abTime = el.timesAB.value;
};

const printTicket = () => {
const cost = 1 * (((el.direction.value & 1) ? costAB : 0) + ((el.direction.value & 2) && costBA));
if(el.direction.value & 2){
travelTimeMinutes = 100
}
el.output.innerHTML = `
${coll.value} билета по маршруту ${el.direction.value} стоимостью ${cost} руб.
Это путешествие займет у вас ${travelTimeMinutes} минут.
Теплоход отправляется в ${el.timesAB.value}, а прибудет в ${el.timesAB.value.substr(0,3) + 50}.
`;
};

const update = () => (onDirectionChange(), filterBAOptions());

el.direction.addEventListener('change', update);
el.timesAB.addEventListener('change', update);
el.timesBA.addEventListener('change', update);

update();
  • Вопрос задан
  • 66 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
Dr_Elvis
@Dr_Elvis
В гугле забанен
let time = new Date();
time.setMinutes(time.getMinutes() + 50)
console.log(time);
Ответ написан
thewind
@thewind
php программист, front / backend developer
Схематично так:
1. Отслеживаем onchange на селекте
2. Внутри события берем option:selected
3. У этого option берем атрибут (например, из dataset), содержащий время отправки
4. Парсим значение этого атрибута , прибавляем к нему 50 минут
5. Выводим результат, куда требуется
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы