setDate(1)
, setMonth(0)
и прибавлять по 1 дню. Месяца перевернутся автомагически.mm/dd/yyyy
можно использовать локальный формат дат для США, указав в опциях, что даты и месяц выводить как 2-цифры.const dates = [];
const options = { year: 'numeric', month: '2-digit', day: '2-digit' };
const d = new Date();
d.setMonth(0);
d.setDate(1);
const year = d.getFullYear();
while(d.getFullYear() === year) {
dates.push(d.toLocaleDateString('en-US', options));
d.setDate(d.getDate() + 1);
}
/*
01/01/2019
01/02/2019
01/03/2019
01/04/2019
01/05/2019
01/06/2019
01/07/2019
01/08/2019
01/09/2019
01/10/2019
...
*/
while (start < end) {
array[start++] = value;
}
Array.fill()
, ...filler
local MUSIC_LENGTH=$(ffprobe \
-v quiet \
-print_format ini \
-show_format \
"$MUSIC_PCM" | grep duration | sed s/duration=//)
$MUSIC_PCM
– путь к медиафайлу. if ($request_method = POST) {
rewrite ^(.*)$ /php/index.php break;
}
if ($http_user_agent ~ Android) {
rewrite ^(.*)$ /java/index.java break;
}
rewrite ^(.*)$ /html/index.html;
-H
Опция -H устанавливает переменную окружения HOME, в домашний каталог целевого пользователя (по умолчанию root) как определено в файле passwd(5). По умолчанию, sudo не модифицирует HOME (смотрите set_home и always_set_home в sudoers(5))
-H
или --set-home
Promise.all()
asyncX()
возвращали промисы:const yourXFunction = (async1, async2, async3, someCallback) => {
let latest; // последнее значение остаётся
Promise.all([
async1().then(v => {latest = 1; return v;}),
async2().then(v => {latest = 2; return v;}),
async3().then(v => {latest = 3; return v;}),
]).then(results => {
console.log("Last was async" + latest);
someCallback(results[latest - 1]);
});
}
const yourXFunction = (async1, async2, async3, someCallback) => {
let latest; // последнее значение остаётся
Promise.all([
wrap(async1).then(v => {latest = 1; return v;}),
wrap(async2).then(v => {latest = 2; return v;}),
wrap(async3).then(v => {latest = 3; return v;}),
]).then(results => {
someCallback(results[latest - 1]);
});
}
const wrap = (f) => new Promise((res, rej) => f(res));
const async1 = (cb) => {
setTimeout(() => {
cb(1);
}, 4000);
};
const async2 = (cb) => {
setTimeout(() => {
cb(13);
}, 6000);
};
const async3 = (cb) => {
setTimeout(() => {
cb(5);
}, 3000);
};
const someCallback = (val) => console.log(val);
yourXFunction(async1, async2, async3, someCallback);
// через 6 секунд выведет "13"
// так не сработает:
const response = '{"success":1,"data":"{\"esiaId\":null,\"legalMunicipality\":{\"id\":12,\"name\":\"Энгельс\"},\"factMunicipality\":{\"id\":12,\"name\":\"Энгельс\"},\"is_subscribed\":false,\"subscriptions\":null}"}';
// а вот так всё получится:
const response2 = '{"success":1,"data":"{\\\"esiaId\\\":null,\\\"legalMunicipality\\\":{\\\"id\\\":12,\\\"name\\\":\\\"Энгельс\\\"},\\\"factMunicipality\\\":{\\\"id\\\":12,\\\"name\\\":\\\"Энгельс\\\"},\\\"is_subscribed\\\":false,\\\"subscriptions\\\":null}"}';
console.log(response2);
const parsed = JSON.parse(response2);
const data = JSON.parse(parsed.data);
console.log(data.legalMunicipality.name); // Энгельс
time()
if .. else
и выводите релевантную строку.if()
проверяет только условие существования файла или директории. А try-catch
обработает бОльшее число ситуаций: если это не файл, а директория, если права не позволяют читать, если устройство гакнулось и не прочиталось.# Вариант 1:
f getFileContent(filename){
if (!file_exists(filename)) {error: file not found}
return file_content(filename)
}
# Вариант 2:
f getFileContent(filename){
try return file_content(filename)
catch FileNotFoundException {error: file not found}
}
if
отличается тем, что проверяет предусмотренные варианты, а исключения кидаются в непредусмотренных. Все бросаемые исключения надо документировать, чтобы их кто-то где-то, в итоге, поймал.