Дата и время
Встречайте новый встроенный объект: Date. Он содержит дату и время, а также предоставляет методы управления ими.
Например, его можно использовать для хранения времени создания/изменения, для измерения времени или просто для вывода текущей даты.
Создание
Для создания нового объекта Date нужно вызвать конструктор new Date() с одним из следующих аргументов:
Без аргументов – создать объект Date с текущими датой и временем:
let now = new Date(); alert( now ); // показывает текущие дату и время
new Date(milliseconds)
Создать объект Date с временем, равным количеству миллисекунд (тысячная доля секунды), прошедших с 1 января 1970 года UTC+0.
// 0 соответствует 01.01.1970 UTC+0 let Jan01_1970 = new Date(0); alert( Jan01_1970 ); // теперь добавим 24 часа и получим 02.01.1970 UTC+0 let Jan02_1970 = new Date(24 * 3600 * 1000); alert( Jan02_1970 );
Целое число, представляющее собой количество миллисекунд, прошедших с начала 1970 года, называется таймстамп (англ. timestamp).
Это – легковесное численное представление даты. Из таймстампа всегда можно получить дату с помощью new Date(timestamp) и преобразовать существующий объект Date в таймстамп, используя метод date.getTime() (см. ниже).
Датам до 1 января 1970 будут соответствовать отрицательные таймстампы, например:
// 31 декабря 1969 года let Dec31_1969 = new Date(-24 * 3600 * 1000); alert( Dec31_1969 );
new Date(datestring)
Если аргумент всего один, и это строка, то из неё «прочитывается» дата. Алгоритм разбора – такой же, как в Date.parse , который мы рассмотрим позже.
let date = new Date("2017-01-26"); alert(date); // Время не указано, поэтому оно ставится в полночь по Гринвичу и // меняется в соответствии с часовым поясом места выполнения кода // Так что в результате можно получить // Thu Jan 26 2017 11:00:00 GMT+1100 (восточно-австралийское время) // или // Wed Jan 25 2017 16:00:00 GMT-0800 (тихоокеанское время)
new Date(year, month, date, hours, minutes, seconds, ms)
Создать объект Date с заданными компонентами в местном часовом поясе. Обязательны только первые два аргумента.
- year должен состоять из четырёх цифр. Для совместимости также принимаются 2 цифры и рассматриваются как 19xx , к примеру, 98 здесь это тоже самое, что и 1998 , но настоятельно рекомендуется всегда использовать 4 цифры.
- month начинается с 0 (январь) по 11 (декабрь).
- Параметр date здесь представляет собой день месяца. Если параметр не задан, то принимается значение 1 .
- Если параметры hours/minutes/seconds/ms отсутствуют, их значением становится 0 .
new Date(2011, 0, 1, 0, 0, 0, 0); // // 1 Jan 2011, 00:00:00 new Date(2011, 0, 1); // то же самое, так как часы и проч. равны 0
Максимальная точность – 1 мс (до 1/1000 секунды):
let date = new Date(2011, 0, 1, 2, 3, 4, 567); alert( date ); // 1.01.2011, 02:03:04.567
Получение компонентов даты
Существуют методы получения года, месяца и т.д. из объекта Date :
getFullYear() Получить год (4 цифры) getMonth() Получить месяц, от 0 до 11. getDate() Получить день месяца, от 1 до 31, что несколько противоречит названию метода. getHours(), getMinutes(), getSeconds(), getMilliseconds() Получить, соответственно, часы, минуты, секунды или миллисекунды.
Никакого getYear() . Только getFullYear()
Многие интерпретаторы JavaScript реализуют нестандартный и устаревший метод getYear() , который порой возвращает год в виде двух цифр. Пожалуйста, обходите его стороной. Если нужно значение года, используйте getFullYear() .
Кроме того, можно получить определённый день недели:
getDay() Вернуть день недели от 0 (воскресенье) до 6 (суббота). Несмотря на то, что в ряде стран за первый день недели принят понедельник, в JavaScript начало недели приходится на воскресенье.
Все вышеперечисленные методы возвращают значения в соответствии с местным часовым поясом.
Однако существуют и их UTC-варианты, возвращающие день, месяц, год для временной зоны UTC+0: getUTCFullYear(), getUTCMonth(), getUTCDay(). Для их использования требуется после «get» подставить «UTC» .
Если ваш местный часовой пояс смещён относительно UTC, то следующий код покажет разные часы:
// текущая дата let date = new Date(); // час в вашем текущем часовом поясе alert( date.getHours() ); // час в часовом поясе UTC+0 (лондонское время без перехода на летнее время) alert( date.getUTCHours() );
Помимо вышеприведённых методов, существуют два особых метода без UTC-варианта:
Для заданной даты возвращает таймстамп – количество миллисекунд, прошедших с 1 января 1970 года UTC+0.
Возвращает разницу в минутах между UTC и местным часовым поясом:
// если вы в часовом поясе UTC-1, то выводится 60 // если вы в часовом поясе UTC+3, выводится -180 alert( new Date().getTimezoneOffset() );
Установка компонентов даты
Следующие методы позволяют установить компоненты даты и времени:
- setFullYear(year, [month], [date])
- setMonth(month, [date])
- setDate(date)
- setHours(hour, [min], [sec], [ms])
- setMinutes(min, [sec], [ms])
- setSeconds(sec, [ms])
- setMilliseconds(ms)
- setTime(milliseconds) (устанавливает дату в виде целого количества миллисекунд, прошедших с 01.01.1970 UTC)
У всех этих методов, кроме setTime() , есть UTC-вариант, например: setUTCHours() .
Как мы видим, некоторые методы могут устанавливать сразу несколько компонентов даты, например: setHours . Если какая-то компонента не указана, она не меняется.
let today = new Date(); today.setHours(0); alert(today); // выводится сегодняшняя дата, но значение часа будет 0 today.setHours(0, 0, 0, 0); alert(today); // всё ещё выводится сегодняшняя дата, но время будет ровно 00:00:00.
Автоисправление даты
Автоисправление – это очень полезная особенность объектов Date . Можно устанавливать компоненты даты вне обычного диапазона значений, а объект сам себя исправит.
let date = new Date(2013, 0, 32); // 32 Jan 2013 . alert(date); // . 1st Feb 2013!
Неправильные компоненты даты автоматически распределяются по остальным.
Предположим, нам требуется увеличить дату «28 февраля 2016» на два дня. В зависимости от того, високосный это год или нет, результатом будет «2 марта» или «1 марта». Нам об этом думать не нужно. Просто прибавляем два дня. Объект Date позаботится об остальном:
let date = new Date(2016, 1, 28); date.setDate(date.getDate() + 2); alert( date ); // 1 Mar 2016
Эту возможность часто используют, чтобы получить дату по прошествии заданного отрезка времени. Например, получим дату «спустя 70 секунд с текущего момента»:
let date = new Date(); date.setSeconds(date.getSeconds() + 70); alert( date ); // выводит правильную дату
Также можно установить нулевые или даже отрицательные значения. Например:
let date = new Date(2016, 0, 2); // 2 Jan 2016 date.setDate(1); // задать первое число месяца alert( date ); date.setDate(0); // первый день месяца -- это 1, так что выводится последнее число предыдущего месяца alert( date ); // 31 Dec 2015
Преобразование к числу, разность дат
Если объект Date преобразовать в число, то получим таймстамп по аналогии с date.getTime() :
let date = new Date(); alert(+date); // количество миллисекунд, то же самое, что date.getTime()
Важный побочный эффект: даты можно вычитать, в результате получаем разность в миллисекундах.
Этот приём можно использовать для измерения времени:
let start = new Date(); // начинаем отсчёт времени // выполняем некоторые действия for (let i = 0; i < 100000; i++) < let doSomething = i * i * i; >let end = new Date(); // заканчиваем отсчёт времени alert( `Цикл отработал за $ миллисекунд` );
Date.now()
Если нужно просто измерить время, объект Date нам не нужен.
Существует особый метод Date.now() , возвращающий текущую метку времени.
Семантически он эквивалентен new Date().getTime() , однако метод не создаёт промежуточный объект Date . Так что этот способ работает быстрее и не нагружает сборщик мусора.
Данный метод используется из соображений удобства или когда важно быстродействие, например, при разработке игр на JavaScript или других специализированных приложений.
Вероятно, предыдущий пример лучше переписать так:
let start = Date.now(); // количество миллисекунд с 1 января 1970 года // выполняем некоторые действия for (let i = 0; i < 100000; i++) < let doSomething = i * i * i; >let end = Date.now(); // заканчиваем отсчёт времени alert( `Цикл отработал за $ миллисекунд` ); // вычитаются числа, а не даты
Бенчмаркинг
Будьте внимательны, если хотите точно протестировать производительность функции, которая зависит от процессора.
Например, сравним две функции, вычисляющие разницу между двумя датами: какая сработает быстрее?
Подобные вычисления, замеряющие производительность, также называют «бенчмарками» (benchmark).
// есть date1 и date2, какая функция быстрее вернёт разницу между ними в миллисекундах? function diffSubtract(date1, date2) < return date2 - date1; >// или function diffGetTime(date1, date2)
Обе функции делают буквально одно и то же, только одна использует явный метод date.getTime() для получения даты в миллисекундах, а другая полагается на преобразование даты в число. Результат их работы всегда один и тот же.
Но какая функция быстрее?
Для начала можно запустить их много раз подряд и засечь разницу. В нашем случае функции очень простые, так что потребуется хотя бы 100000 повторений.
function diffSubtract(date1, date2) < return date2 - date1; >function diffGetTime(date1, date2) < return date2.getTime() - date1.getTime(); >function bench(f) < let date1 = new Date(0); let date2 = new Date(); let start = Date.now(); for (let i = 0; i < 100000; i++) f(date1, date2); return Date.now() - start; >alert( 'Время diffSubtract: ' + bench(diffSubtract) + 'мс' ); alert( 'Время diffGetTime: ' + bench(diffGetTime) + 'мс' );
Вот это да! Метод getTime() работает ощутимо быстрее! Всё потому, что не производится преобразование типов, и интерпретаторам такое намного легче оптимизировать.
Замечательно, это уже что-то. Но до хорошего бенчмарка нам ещё далеко.
Представьте, что при выполнении bench(diffSubtract) процессор параллельно делал что-то ещё, также потребляющее ресурсы. А к началу выполнения bench(diffGetTime) он это уже завершил.
Достаточно реалистичный сценарий в современных многопроцессорных операционных системах.
В итоге у первого бенчмарка окажется меньше ресурсов процессора, чем у второго. Это может исказить результаты.
Для получения наиболее достоверных результатов тестирования производительности весь набор бенчмарков нужно запускать по нескольку раз.
function diffSubtract(date1, date2) < return date2 - date1; >function diffGetTime(date1, date2) < return date2.getTime() - date1.getTime(); >function bench(f) < let date1 = new Date(0); let date2 = new Date(); let start = Date.now(); for (let i = 0; i < 100000; i++) f(date1, date2); return Date.now() - start; >let time1 = 0; let time2 = 0; // bench(diffSubtract) и bench(diffGetTime) поочерёдно запускаются 10 раз for (let i = 0; i < 10; i++) < time1 += bench(diffSubtract); time2 += bench(diffGetTime); >alert( 'Итоговое время diffSubtract: ' + time1 ); alert( 'Итоговое время diffGetTime: ' + time2 );
Современные интерпретаторы JavaScript начинают применять продвинутые оптимизации только к «горячему коду», выполняющемуся несколько раз (незачем оптимизировать то, что редко выполняется). Так что в примере выше первые запуски не оптимизированы должным образом. Нелишним будет добавить предварительный запуск для «разогрева»:
// добавляем для "разогрева" перед основным циклом bench(diffSubtract); bench(diffGetTime); // а теперь тестируем производительность for (let i = 0; i
Будьте осторожны с микробенчмарками
Современные интерпретаторы JavaScript выполняют множество оптимизаций. Они могут повлиять на результаты «искусственных тестов» по сравнению с «нормальным использованием», особенно если мы тестируем что-то очень маленькое, например, работу оператора или встроенной функции. Поэтому если хотите серьёзно понять производительность, пожалуйста, изучите, как работают интерпретаторы JavaScript. И тогда вам, вероятно, уже не понадобятся микробенчмарки.
Отличный набор статей о V8 можно найти на https://mrale.ph.
Разбор строки с датой
Метод Date.parse(str) считывает дату из строки.
Формат строки должен быть следующим: YYYY-MM-DDTHH:mm:ss.sssZ , где:
- YYYY-MM-DD – это дата: год-месяц-день.
- Символ «T» используется в качестве разделителя.
- HH:mm:ss.sss – время: часы, минуты, секунды и миллисекунды.
- Необязательная часть ‘Z’ обозначает часовой пояс в формате +-hh:mm . Если указать просто букву Z , то получим UTC+0.
Возможны и более короткие варианты, например, YYYY-MM-DD или YYYY-MM , или даже YYYY .
Вызов Date.parse(str) обрабатывает строку в заданном формате и возвращает таймстамп (количество миллисекунд с 1 января 1970 года UTC+0). Если формат неправильный, возвращается NaN .
let ms = Date.parse('2012-01-26T13:51:50.417-07:00'); alert(ms); // 1327611110417 (таймстамп)
Можно тут же создать объект new Date из таймстампа:
Создать таблицу с кликабельными ячейками, которые реагируют на ивент click
У меня задача: создать HTML таблицу при помощи JS, где ячейками выступают кнопки Логика работы сайта: На вход подается .csv файл. Логика заточена под определенный файл, где по началу выводится таблица дат. Задача: нужно сделать так, чтобы при нажатии на ячейку, вместо двух дат выводилась полная строчка с данными. То есть, нажав на ячейку с датой, чтобы выводилась вся строка. (Пример внизу под кодом) Я хотел сделать это в виде таблицы из кнопок, но проблема в том что кнопки создаются внутри цикла, и в таком случае нет доступа к addEventListener(«click») Внизу на картинке представлен первый вывод таблицы. Входной файл под который заточен сайт содержит в себе 28 колонок. На картинке изображены две из них .html:
/** * @param <*>inputForm - form element * @param <*>file - input with type="file" * @param <*>filterInput - input filter word */ const inputForm = document.getElementById("input-form") const file = document.getElementById("file-choose") const filterInput = document.getElementById("test-input") const dataTable = document.getElementById("data-table") const emptyMessage = document.getElementById('empty-message') const dateInput = document.getElementById("date-input") const rowLimiter = document.getElementById("row-limiter") const timeInput = document.getElementById("time-input") /** * @param <*>table - creating element table * @param <*>thead - creating element table header * @param <*>tbody - creating element table body */ /** * @function csvToArray - function that converts csv file data into an array * @param str * @param delimiter * @return Array with all information from file */ function csvToArray(str, delimiter=',') < /** * @param headers - array, is created from the first row elements. String slices from index 0, to index of first '\n' * @param rows - array of rows. Each row - object with key:value * */ const headers = str.slice(0, str.indexOf("\n")).split(delimiter) const rows = str.slice(str.indexOf("\n") + 1).split("\n") // As last element of headers is '\r', it erases headers.pop() /** * @param arr - Data array. Includes objects with data as array elements * @param values - Values from the row splitted by separator '-' * @param element - Object that appears from headers Array as setting key:value * @return arr - Result array */ const arr = rows.map((row) => < const values = row.split(delimiter) const element = headers.reduce((object, header, index) =>< object[header] = values[index] return object >, <>) return element >) return arr > /** * * @param data - Array of objects * @returns initialArray - Array of arrays, each element of whom - is array with two specific values * * As by the assignment table has to print only two dates first, we fill array with arrays of those two dates from each object */ function setInitialTable(data) < let initialArray = [['tLogIn', 'tLogOut']] for (let i = 0; i < data.length; i++) < initialArray.push([data[i].tLogIn, data[i].tLogOut]) >return initialArray > inputForm.addEventListener("submit", (e) => < /** * e.preventDefault() - prevents reload when click Submit button */ e.preventDefault() // A files property returnes files list. So [0] will return us first file const input = file.files[0] /** * @param table - table element. Will be used to append thead and tbody * @param thead - table header element. Will be used to append tr and th inside * @param tbody - table body element. Will be used to append tr and td inside * @param reader - FileReader variable. Will be used to work with file */ let table = document.createElement("table") let thead = document.createElement("thead") let tbody = document.createElement("tbody") const reader = new FileReader() // Check if file chosen or not. If not - prints following message if (file.value == '') < emptyMessage.innerHTML = "File not chosen" dataTable.innerHTML = '' >else < reader.onload = function(e) < // Recieving table info in text form separated with coma const text = e.target.result // If recieved file is empty, message with be revealed with file name if (text.length === 0) < if (file.DOCUMENT_NODE >0) < dataTable.innerHTML = '' table.innerHTML = '' thead.innerHTML = '' tbody.innerHTML = '' >/** * file.value will be recieved as C:\\. * So to recieve file name, we need to split it by '\\', and it will be ["C:", . "file.name"] */ const arrFromFileName = file.value.replaceAll('\\', ',').split(',') // To print file name, we need to take the last element of array emptyMessage.innerHTML = `File $ is empty` > // If file is not empty: else < // Cleaning emptyMessage field if it was printed before if (emptyMessage.value != 0) emptyMessage.innerHTML = '' /** * @param data - Data array with Array of Objects * @param initialArray - Array with only two columns */ const data = csvToArray(text) const initialArray = setInitialTable(data) // Cleaning table if it was printed before dataTable.innerHTML = '' table.innerHTML = '' thead.innerHTML = '' tbody.innerHTML = '' // Adding thead and tbody to the table table.appendChild(thead) table.appendChild(tbody) // Adding table to our parent table declared in HTML file document.getElementById('data-table').appendChild(table) /** * @param hrow - Header row * * First row in InitialArray are headers names as it's written in csvToArray() function when adding headers * So we create a loop with 2 iterations as we have only 2 columns, and take first row as headers names */ let hrow = document.createElement('tr') for (let i = 0; i < initialArray[i].length; i++) < let theader = document.createElement('th') // Writing header name into theader slot theader.innerHTML = initialArray[0][i] // Appending theader slot to header row hrow.appendChild(theader) >// Appending header row into Header section thead.appendChild(hrow) /** * @param rowLimiter - rowLimiter from HTML input with type="number". * Unary plus converts recieved string into a number * @param table_data - table data slot * @param table_data_button - a button inserting into a table slot * @param body_row - row for table body (tbody) * @param tbody - table body * * Iterations going from 1 to rowLimiter. From 1, because index 0 in initialArray is headers array, and we need only data */ for (let i = 1; i < +rowLimiter.value; i++) < let body_row = document.createElement('tr') for (let j = 0; j < 2; j++) < let table_data = document.createElement('td') var table_data_button = document.createElement('button') if (initialArray[i][j].length !== 0) < table_data_button.innerHTML = initialArray[i][j] table_data.appendChild(table_data_button) >body_row.appendChild(table_data) > tbody.appendChild(body_row) > table_data_button.addEventListener("click", (e) => < e.preventDefault() console.log("Click!") >) table.appendChild(thead) table.appendChild(tbody) dataTable.appendChild(table) > > // Using to read input file reader.readAsText(input) > >)
* < font-family: 'Courier New', Courier, monospace; >body < margin: 0; >#file-choose < max-width: fit-content; >#data-table table < margin: none; >#data-table < margin: auto; border-collapse: collapse; border-radius: 5px; font-size: 0.9em; font-family: sans-serif; min-width: fit-content; box-shadow: 0 0 20px rgba(0, 0, 0, 0.15); >#data-table < max-width: 1400px; >#data-table thead tr < background-color: #009897; color: #ffffff; text-align: left; >#data-table th, #data-table td < padding: 12px 15px; >#data-table tbody tr < border-bottom: 1px solid #dddddd; >#data-table tbody tr:nth-child(even) < background-color: #f3f3f3; >#data-table tbody tr:last-of-type < border-bottom: 2px solid #009897; border-radius: 50px; >#data-table tbody td button < border: none; background-color: transparent; cursor: pointer; >#empty-message < text-align: center; font-size: 40px; >#file-choose < margin-right: -0px; max-width: 90px; >#input-section < display: flex; flex-direction: row; justify-content: space-evenly; margin: 0 250px; width: 70%; >#input-form < position: static; min-height: 100px; display: flex; flex-direction: column; justify-content: center; align-items: center; border-bottom-left-radius: 15px; border-bottom-right-radius: 15px; >#row-limiter < max-width: 85px; >#test-input < >.submit-button
Excel Transform Site
Пример: Нажав на ячейку 11/01/2022 5:00, таблица закрывается и вместо нее выводится строчка header 1| header 2 | tLogIn | tLogOut | header 3 | data 1 | data 2 | 11/01/2022 5:00 | 11/01/2022 8:00 | data 3 | Данные для .csv файла на вход:
header 1,header 2,tLogIn,tLogOut,header 3 data 1,data 2,"11/01/2022 5:00", "11/01/2022 8:00",data 3, data 11,data 22,"15/04/2019 12:00","15/04/2019 15:00",data 33
Курсы javascript
Здравствуйте, подскажите пожалуйста как можно сделать следующее:
есть таблица, в одном из столбцов в которой должны выводится даты на две недели вперед. И что бы при истечении этих двух недель выводились новые даты для последующих двух недель.
Пример таблицы здесь, хотя она не закончена, но для обьяснения задачи подходит.
Я в Javascript не очень силен, поэтому желательно что то готовое
Сайт на ВордПресс, так что плагин какой нибудь тоже подойдет
Спасибо заранее
UPD. Ниже привожу пример требуемой таблицы. Нужно, что бы даты самозаменялись после этих двух недель
07.01.13 Masha
08.01.13 Petya
09.01.13 Katya
10.01.13 Vasya
11.01.13 Alena
12.01.13 Kolya
13.01.13 Serega
14.01.13 Oleg
15.01.13 Lada
16.01.13 Nikita
17.01.13 Anya
18.01.13 Daniil
19.01.13 Dmitriy
20.01.13 Alexey
Так должно быть по истечению этих двух недель:
21.01.13
22.01.13
23.01.13
24.01.13
25.01.13
26.01.13
27.01.13
28.01.13
29.01.13
30.01.13
31.01.13
01.02.13
02.02.13
03.02.13
И по истечению этих двух, следующие две и так далее.
Последний раз редактировалось Dimas95, 07.01.2013 в 18:27 . Причина: update
07.01.2013, 18:06
без статуса
Регистрация: 25.05.2012
Сообщений: 8,219
Сделайте в топике пару(или скок там) колонок с реальными датами, дабы по сто раз не пояснять
07.01.2013, 18:20
без статуса
Регистрация: 25.05.2012
Сообщений: 8,219
Эээ тут лучше ссылку, http://dkstudio.net/work/john/
И пару столбиков с текстом(не HTML) реальных дат, посколь непонятен алгоритм
07.01.2013, 18:21
Интересующийся
Регистрация: 24.07.2012
Сообщений: 18
07.01.2013, 18:21
без статуса
Регистрация: 25.05.2012
Сообщений: 8,219
07.01.2013, 18:28
Интересующийся
Регистрация: 24.07.2012
Сообщений: 18
Добавил. Так наверное будет наглядно
07.01.2013, 19:51
без статуса
Регистрация: 25.05.2012
Сообщений: 8,219
сейчас покурочу
07.01.2013, 21:57
без статуса
Регистрация: 25.05.2012
Сообщений: 8,219
Не увидел в таблице http://dkstudio.net/work/john/ данных вышеприведённого формата,
поэтому думайте сами из какой колонки их брать (см переменную N в скрипте)
Подразумевается что дата формата 07.01.13 расположена в одной колонке
$(document).ready(function()< var Delta=1000*60*60*24*14 //Добавляемое Кол-во миллисекунд function dateExchang(d,Delta) < a=a.replace(/\./g,' ').replace(/\s(\d\d)\s*$/,' 20$1') a=a.replace(/^(.)(.)/,'$2$1') var d = new Date(); d.setTime(Date.parse(a)+Delta); d=d.split(/\s+/) return d; > var N=1; //Номер колонки(1- это вторая, первая - 0) откуда берем - заменяем и впихиваем $("div.entry-content>table tr").each(function()< var a=$(this).find('td').eq(N); a.text(dateExchang(a.text(),Delta)); >); >);
Последний раз редактировалось Deff, 07.01.2013 в 22:03 .
08.01.2013, 02:11
Интересующийся
Регистрация: 24.07.2012
Сообщений: 18
Спасибо за скрипт, очень благодарен. Но я не совсем понимаю как его применить. Я обновил таблицу на сайте (первая таблица), и проставил в ней даты через HTML вручную. А не подскажете ли как сделать что бы даты проставлялись автоматически скриптом? Насколько я понимаю, нужно поесить событие onLoad на каждую строку таблицы, но что делать после этого? Тоесть могли бы вы применить этот скрипт к приведенной таблице?
Вот код таблицы
Date 07.01.13 Name 08.01.13 Name 09.01.13 Name 10.01.13 Name 11.01.13 Name 12.01.13 Name 13.01.13 Name 14.01.13 Name 15.01.13 Name 16..01.13 Name 17.01.13 Name 18.01.13 Name 19.01.13 Name 20.01.13 Name
08.01.2013, 03:47
без статуса
Регистрация: 25.05.2012
Сообщений: 8,219
Dimas95, См спойлер!
Date 07.01.13 Name 08.01.13 Name 09.01.13 Name 10.01.13 Name 11.01.13 Name 12.01.13 Name 13.01.13 Name 14.01.13 Name 15.01.13 Name 16.01.13 Name 17.01.13 Name 18.01.13 Name 19.01.13 Name 20.01.13 Name
Cкрипт пока тупо добавляет 14 дней к сушествующим в таблице//Обновление дат по окончании cрока- пока не делал
(В вообще какой в данном деянии заложен аргумент ? — Для чего этот финт ?
Последний раз редактировалось Deff, 08.01.2013 в 04:09 .
| Страница 1 из 2 | 1 | 2 | > |
Числа и даты
Данный раздел представляет собой введение в работу с числами и датами в JavaScript.
Числа
В JavaScript все числа являются числами двойной точности в соответствии с 64-битным двоичным форматом IEEE 754 (т.е. числами, принадлежащими диапазону между -(253 -1) и 253 -1). Целые числа не рассматриваются как отдельный тип чисел. В дополнение к числам с плавающей запятой, к числовому типу данных относятся также три символьные величины: + бесконечность , — бесконечность , и NaN (не-число). В разделе типы и структуры данных в JavaScript числовой тип данных описан в контексте с другими примитивными типами в JavaScript.
Вы можете использовать четыре типа числовых литералов: десятичный, двоичный, восьмеричный и шестнадцатеричный.
Десятичные числа
1234567890; 42; // Будьте внимательны при использование нулей в начале чисел: 0888; // 888 обрабатывается как десятичное 0777; // обрабатывается как восьмеричное в нестрогой форме (511 в десятичной)
Обратите внимание, что десятичные литералы могут начинаться с нуля ( 0 ) за которым следует другая десятичная цифра, но если следующая за нулём цифра меньше 8, то число обрабатывается как восьмеричное.
Двоичные числа
Синтаксис двоичных чисел использует ведущий 0 за которым следует латинская буква «B» в верхнем или нижнем регистре ( 0b or 0B ). Если цифры после 0b не являются 0 или 1, то будет сгенерированно SyntaxError с сообщением: «Missing binary digits after 0b».
var FLT_SIGNBIT = 0b10000000000000000000000000000000; // 2147483648 var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040 var FLT_MANTISSA = 0b00000000011111111111111111111111; // 8388607
Восьмеричные числа
Синтаксис восьмеричных чисел использует ноль в начале. Если цифры после 0 не входят в диапазон от 0 до 7, число будет интерпретировано как десятичное.
var n = 0755; // 493 var m = 0644; // 420
Шестнадцатеричные числа
Синтаксис шестнадцатеричных чисел использует ведущий 0 за которым следует латинская буква «X» в верхнем или нижнем регистре ( 0x or 0X ). Если цифры после 0x не входят в диапазон (0123456789ABCDEF), то будет сгенерированно SyntaxError с сообщением: «Identifier starts immediately after numeric literal».
0xfffffffffffffffff; // 295147905179352830000 0x123456789abcdef; // 81985529216486900 0xa; // 10
Объект Number
У этого встроенного объекта Number есть свойства для целочисленных констант, таких как максимальное число, не-число и бесконечность. Вы не можете изменить значения этих свойств, и вы должны использовать их следующим образом:
var biggestNum = Number.MAX_VALUE; var smallestNum = Number.MIN_VALUE; var infiniteNum = Number.POSITIVE_INFINITY; var negInfiniteNum = Number.NEGATIVE_INFINITY; var notANum = Number.NaN;
Как видно из примера выше, для получения перечисленных значений, нужно обращаться к свойствам предопределённого глобального объекта Number . Тогда как у экземпляра этого объекта, созданного вами при работе программы, этих свойств не будет.
В следующей таблице приведён список свойств объекта Number .
| Свойство | Описание |
|---|---|
| Number.MAX_VALUE | Наибольшее число из возможных для представления |
| Number.MIN_VALUE | Наименьшее число из возможных для представления |
| Number.NaN | Специальное «Не числовое» («not a number») значение |
| Number.NEGATIVE_INFINITY | Специальное значение «Минус бесконечность»; возвращается при переполнении |
| Number.POSITIVE_INFINITY | Специальное значение «Плюс бесконечность»; возвращается при переполнении |
| Number.EPSILON | Разница между единицей и наименьшим значением, большим единицы, которое может быть представлено типом Number . |
| Number.MIN_SAFE_INTEGER | Минимальное целое, безопасное число в JavaScript. |
| Number.MAX_SAFE_INTEGER | Максимальное целое, безопасное число в JavaScript. |
| Метод | Описание |
|---|---|
| Number.parseFloat() | Принимает строку как аргумент, и возвращает числовое значение с плавающей точкой, которое удалось распознать. Тоже самое что и глобальная функция parseFloat() . |
| Number.parseInt() | Принимает строку как аргумент, и возвращает целочисленное значение в заданной системе исчисления, которое удалось распознать. Тоже самое что и глобальная функция parseInt() . |
| Number.isFinite() | Определяет, является ли число, переданное в качестве аргумента, конечным. |
| Number.isInteger() | Определяет, является ли число, переданное в качестве аргумента, целым. |
| Number.isNaN() | Определяет, является ли число, переданное в качестве аргумента, NaN (не числом). Аналогичный, но более надёжный метод чем глобальная функция isNaN() . |
| Number.isSafeInteger() | Определяет, является ли .число, переданное в качестве аргумента, целым и безопасным. |
Прототип Number предоставляет ряд методов, для получения значения числа в различных форматах. В следующей таблице перечислены методы, доступные через Number.prototype .
| Метод | Описание |
|---|---|
| toExponential() | Возвращает строку, представляющую число в экспоненциальном представлении. |
| toFixed() | Возвращает строку, представляющую число с заданным количеством разрядов после запятой. |
| toPrecision() | Возвращает строку, представляющую число с указанной точностью. |
Объект Math
Встроенный глобальный объект Math содержит свойства и методы для математических констант и функций. Например, свойство объекта Math PI содержит значение математической константы «Пи» (3.141. ), которые вы можете использовать в программе как
Подобным образом, математические функции являются методами объекта Math . Они включают тригонометрические, логорифмические, экспоненциальные и другие функции. Например, если вы хотите использовать тригонометрическую функцию синуса, вы напишете следующий код
.sin(1.56);
Заметьте, что все тригонометрические методы объекта Math принимают аргументы в радианах.
В следующей таблице перечислены методы объекта Math .
| Метод | Описание |
|---|---|
| abs() | Возвращает абсолютное значение (модуль) аргумента |
| sin() , cos() , tan() | Стандартные тригонометрические функции; принимают аргументы в радианах |
| asin() , acos() , atan() , atan2() | Обратные тригонометрические функции; возвращают значения в радианах |
| sinh() , cosh() , tanh() | Гиперболические тригонометрические функции; принимают аргументы в гиперболических углах |
| asinh() , acosh() , atanh() | Обратные гиперболические тригонометрические функции; возвращают значения в гиперболических углах |
| pow() , exp() , expm1() , log10() , log1p() , log2() | Экспоненциальные и логорифмические функции |
| floor() , ceil() | Возвращают наибольшее/наименьшее целое, которое меньше/больше или равно входному значению |
| min() , max() | Возвращают наибольшее или наименьшее (соответственно) из входных числовых значений, перечисленных через запятую |
| random() | Возвращает случайное число от 0 до 1 |
| round() , fround() , trunc() , | Функции округления и отсечения дробной части |
| sqrt() , cbrt() , hypot() | Корень квадратный, корень кубический, корень квадратный из суммы квадратов аргументов |
| sign() | Знак числа, показывает является ли входное число позитивным, негативным или равным нулю |
| clz32() , imul() | Количество первых нулевых бит в 32-битном двоичном представлении. Возвращает результат Си-подобного 32-битного целочисленного умножения двух аргументов. |
В отличии от большинства других объектов, вам не нужно создавать свои экземпляры объекта Math . Всегда следует использовать глобальный объект Math непосредственно.
Объект Date
JavaScript не имеет отдельного типа данных для хранения дат. Однако, вы можете использовать объект Date и его методы для работы с датами и временном в вашем приложении. Объект Date имеет большое количество методов для записи, чтения и оперирования датой и временем, а свойств не имеет ни одного.
JavaScript оперирует датами во многом аналогично языку Java. Для работы с датой эти два языка имеют множество одинаковых методов, и оба они хранят даты как количество миллисекунд, прошедших с 00:00:00 1 Января 1970 года.
Период значений, которые может принимать Data, простирается от -100 000 000 до100 000 000 дней, относительно 1 Января 1970 года.
Чтобы создать свой экземпляр объекта Date используйте такой код :
var dateObjectName = new Date([parameters]);
где dateObjectName это имя переменной, которой будет присвоено созданное значение с типом Date ; вместо этой переменной, присвоить созданное значение можно как свойство, любому существующему объекту.
Вызов Date как функции, без ключевого слова new, возвращает текущую дату и время в виде текстовой строки.
Содержимым блока parameters в коде представленном выше, могут выступать любая из следующих конструкций:
- Пусто: создаёт текущую дату и время. Пример: today = new Date(); .
- Текстовая строка, содержащая дату и время в следующем формате: «Месяц день, год часы:минуты:секунды». Например: var Xmas95 = new Date(«December 25, 1995 13:30:00») . Если не указать секунды, минуты или часы, то их значение будет принято за 0.
- Набор целочисленных значений для года, месяца и дня. Например: var Xmas95 = new Date(1995, 11, 25) .
- Набор целочисленных значений для года, месяца, дня, часов, минут и секунд. Например: var Xmas95 = new Date(1995, 11, 25, 9, 30, 0); .
Получение даты в русскоязычном формате
new Date().toLocaleString('ru', < day: 'numeric', month: 'long', year: 'numeric' >); // текущая дата в формате: '10 января 2019 г.'
Методы объекта Date
Методы объекта Date для работы с датой и временем делятся на следующие категории:
- «set» методы, служат для установки параметров объекта Date .
- «get» методы, служат для получения параметров объекта Date .
- «to» методы, служат для получения значения объекта Date в текстовом виде.
- «parse» и UTC методы, служат для распознавания дат и времени из текстового формата.
При помощи методов групп «get» и»set», вы можете получить и установить значения секунд, минут, часов, дня месяца, дня недели, месяца и года по отдельности. Отдельно выделим метод getDay , который возвращает день недели, однако соответствующего ему метода setDay не существует, потому-что день недели высчитывается автоматически. Все эти методы используют в своей работе целочисленные значения по следующим правилам:
- Секунды и минуты: от 0 до 59
- Часы: от 0 до 23
- Дни недели: от 0 (Воскресенье) до 6 (Суббота)
- Дни месяца: от 1 до 31
- Месяцы: от 0 (Январь) до 11 (Декабрь)
- Год: год относительно 1900 года.
Например, предположим, что вы определили дату следующим образом:
var Xmas95 = new Date("December 25, 1995");
Тогда Xmas95.getMonth() вернёт 11, а Xmas95.getFullYear() вернёт 1995.
Методы getTime и setTime могут быть полезны при сравнении дат. Метод getTime возвращает количество миллисекунд, прошедших с 00:00:00 1 Января, 1970 года.
Для примера рассмотрим следующий код, показывающий количество дней оставшихся до конца текущего года:
var today = new Date(); // Получаем текущую дату var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Устанавливаем месяц и день на конец года endYear.setFullYear(today.getFullYear()); // Устанавливаем текущий год var msPerDay = 24 * 60 * 60 * 1000; // Количество миллисекунд в одних сутках var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay; var daysLeft = Math.round(daysLeft); // возвращает количество дней, оставшихся до конца года
Этот пример создаёт объект Date названный today, который содержит текущую дату и время . Затем, создаётся вспомогательный Date объект, названный endYear, которому устанавливаются значения, указывающие на конец года. После этого, при помощи рассчитанного количества миллисекунд в сутках, вычисляется количество дней между today и endYear , При этом используются метод getTime и округление, для получения количества полных дней.
Метод parse полезен для присвоения значений существующим объектам Date из текстового формата. Например, следующий код использует методы parse и setTime чтобы установить значение переменной IPOdate :
var IPOdate = new Date(); IPOdate.setTime(Date.parse("Aug 9, 1995"));
Пример
В следующем примере приведена функция JSClock(), которая возвращает время в формате электронных часов:
function JSClock() var time = new Date(); var hour = time.getHours(); var minute = time.getMinutes(); var second = time.getSeconds(); var temp = "" + (hour > 12 ? hour - 12 : hour); if (hour == 0) temp = "12"; temp += (minute 10 ? ":0" : ":") + minute; temp += (second 10 ? ":0" : ":") + second; temp += hour >= 12 ? " P.M." : " A.M."; return temp; >
Первым делом, функция JSClock создаёт новый объект Date , названный time ; так как объект создаётся баз параметров, переменная time содержит текущую дату и время. Затем вызываются методы getHours , getMinutes и getSeconds , чтобы установить значения переменным hour , minute и second .
Следующие четыре выражения строят текстовую строку на основе time. Первое из них создаёт переменную temp , присваивая ей значение при помощи условия; Если hour больше чем 12, то ( hour — 12 ), иначе просто hour. В случае же, когда hour равно 0, берётся фиксированное значение «12».
Следующее выражение приращивает минуты к переменной temp . Если количество минут меньше 10, то условное выражение добавляет строку с двоеточием и заполняющим нулём, иначе, просто строку с двоеточием. Секунды приращиваются к переменной temp тем же путём.
В завершение всего, последнее условное выражение добавляет строку «P.M.» к переменной temp если hour равно или больше 12, иначе, добавляется строка «A.M.».
- « Предыдущая статья
- Следующая статья »
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 7 авг. 2023 г. by MDN contributors.
