const diffHours = Math.ceil((endDate - startDate) / 36e5); // точно в бОльшую сторону округлять?
const days = Math.floor(diffHours / 24);
const hours = diffHours - days * 24;
console.log(`Срок аренды: ${days} дней и ${hours} часов`);
D = new Date();
D.setHours(D.getHours() + 12) // подвинули вперёд на 12 часов
даты корректируются «автомагически».(
(start, finish) => {
const date = new Date(start);
const dateFinish = new Date(finish);
const result = [];
while (date <= dateFinish) {
result.push(date.toISOString());
date.setHours(date.getHours() + 12);
}
return result;
}
)('2020-01-01T00:00:00+03:00', '2020-03-15T11:58:01+03:00')
/*
Array(149) [ "2019-12-31T21:00:00.000Z", "2020-01-01T09:00:00.000Z", "2020-01-01T21:00:00.000Z", "2020-01-02T09:00:00.000Z", "2020-01-02T21:00:00.000Z", "2020-01-03T09:00:00.000Z", "2020-01-03T21:00:00.000Z", "2020-01-04T09:00:00.000Z", "2020-01-04T21:00:00.000Z", "2020-01-05T09:00:00.000Z", … ]
*/
element.hasAttribute('maxlength')
element.setAttribute('maxlength', 20)
document.querySelectorAll('input[type=password]')
forEach()
maxlength
;const pickProps = (object, ...keys) => keys.reduce((acc, c) => ({ ...acc, [c]: object[c] }), {});
let payload = {
data: pickProps(
this,
'customer',
'tool_type',
'tool_brand',
'tool_model',
'tool_serial_code',
'defect_type',
'defect_description',
'request_type',
'request_description',
'status'
),
}
smartblur = enable='between(t,10,3*60)',
curves = enable='gte(t,3)' : preset=cross_process
Выражения типа between()
и gte()
описаны в Expression evaluationffmpeg -filters
покажет, какие из фильтров подерживают timeline (буква "T").colorchannelmixer
и eq
из вашей команды — поддерживают:Filters:
T.. = Timeline support
.S. = Slice threading
..C = Command support
A = Audio input/output
V = Video input/output
N = Dynamic number and/or type of input/output
| = Source or sink filter
TSC colorchannelmixer V->V Adjust colors by mixing color channels.
T.C eq V->V Adjust brightness, contrast, gamma, and saturation.
function getLargestExpressionResult(a, b) {
let x, max = a + b;
x = a - b;
if (x > max) max = x;
x = a * b;
if (x > max) max = x;
x = a / b;
if (x > max) max = x;
return max;
}
Затем попробуйте оптимизировать, сократить, написать красивее и т.п., если время позволяет.const getLargestExpressionResult = (a, b) => '+-*/'
.split('')
.map(op => eval([+a, op, +b].join('')))
.sort((a, b) => a - b)
.pop();
Это плохой переусложнённый пример, т.к. тут много строк и eval()
— потенциальная дыра в безопасности.eval()
©