const parseToDate = string => {
const [day, month, year, hour, minute] = string.match(/\d+/g).map(match => parseInt(match));
const normalizedYear = year < 2000 && year.toString().length <= 2 ? year + 2000 : year;
const date = new Date(normalizedYear, month - 1, day, hour || 0, minute || 0);
return date;
};
const strings = [
'01 02 2003 04 05',
'01 02 03 04 05',
'01/02/03 04 05',
'01-02-3 04-05',
'23-08/2019 3 4',
'1 1 1980 0 0',
'2 2 0'
];
for (const string of strings) {
const date = parseToDate(string);
console.log(date.toLocaleString());
}
/**
'01.02.2003, 04:05:00'
'01.02.2003, 04:05:00'
'01.02.2003, 04:05:00'
'01.02.2003, 04:05:00'
'23.08.2019, 03:04:00'
'01.01.1980, 00:00:00'
'02.02.2000, 00:00:00'
*/
var a = 'QnA.habr.com';
Object.defineProperty(this, 'a', {
set: function(v) {console.log('Изменяют!'); this.value = v;},
value: 'QnA.habr.com'
});
то теперь любое изменение значения переменной вызовет панику в консоли:a = 'StackOver...';
// Изменяют!
var i; // var в отличие от let и const «всплывает» наверх
// поэтому можно записать и так.
// Это важно, т.к. изменить i могут где-то ниже в коде.
for(i=0; i<10; i++) {
setTimeout(function() { // на каждой итерации создаётся новая функция,
// которая сохраняет ссылку на переменную i
alert(i); // чтобы когда, наконец, сработает,
// вывести что там в i окажется в тот момент
}, 100); // выполнение откладывается на потом через 1/10 сек
}
i
.i
, спасибо циклу, уже выросла до значения 10
. i
на этот момент.i = 2*2*5*0x65 ;
то алёрты выведут наступающий год! localStorage.setItem('toDo', '["Дело номер один", "Дело номер два"]');