/ 

Лайфхак. Номер телефона на сайте

Если у вас небольшой бизнес, магазин или рабочий номер телефона, который отображается на сайте, и нет средств на круглосуточную поддержку по телефону, то лучше, чтобы вам звонили только в рабочее время.

Решение — написать время работы на сайте. В идеале, показать номер если время рабочее. А если нет, то написать время работы и сделать номер телефон полупрозрачным или скрыть.

Если у вас не статический сайт, то лучше реализовать это на сервере. Как это сделать на PHP описано в «блоге Жаржана». Но Jekyll и статические сайты набирают популярность, а в них реализовать это можно только на JavaScript.

Как эксперимент я написал простенькую функцию для этого. В ней не используются новые возможности JS, поскольку этот кусочек будет использоваться как «быстрое решение» и никому не захочется возиться с транспайлерами.

function isGoodTime (params) {
    params = params || {};
    var today = new Date();
    var day = today.getDay();
    var user_offset = today.getTimezoneOffset() / 60 * -1;
    var your_offset = +params.offset || 3;
    var diff_offset = your_offset - user_offset;
    var minutes_now = today.getHours() * 60 + today.getMinutes() + diff_offset * 60;

    if (!params.weekends && (day == 6 || day == 0)) return false;
    if (!params.weekdays && (day > 0 || day < 6)) return false;

    if (day > 0 && day < 6) {
        var wd_from = params.weekdays.from.split(':');
        var wd_to = params.weekdays.to.split(':');
        var from = wd_from[0] * 60 + +wd_from[1];
        var to = wd_to[0] * 60 + +wd_to[1];

        if (minutes_now > from && minutes_now < to) return true;
    } else {
        var we_from = params.weekends.from.split(':');
        var we_to = params.weekends.to.split(':');
        var from = we_from[0] * 60 + +we_from[1];
        var to = we_to[0] * 60 + +we_to[1];

        if (minutes_now > from && minutes_now < to) return true;
    }
    return false;
};

И пример использования:

var available = isGoodTime({
    offset: '+3',
    weekdays: {
        from:   '08:30',
        to:     '16:30',
    },
    weekends: {
        from:   '08:30',
        to:     '15:30',
    }
});
⌘ ⌘ ⌘
Код. Плейсхолдер для [contenteditable]
Фронтенд

Код. Плейсхолдер для [contenteditable]

Placeholder полифил для contenteditable элемента

Как называть переменные
Фронтенд

Как называть переменные

Мой взгляд на соглашения наименования переменных, функций, методов и классов

Плавный, нативный скрол
Фронтенд

Плавный, нативный скрол

Выкиньте лишние библиотеки для прокрутки внутри страницы