Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 06.12.2021, 11:01
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,210

Сообщение от рони
alert(age) // 31?
У меня показывает 30 полных лет...

Не сомневайтесь.
Эта "формула" расчета возраста уже проверена годами эксплуатации на гос. предприятиях.
Правда на другом ЯП...

Последний раз редактировалось ksa, 06.12.2021 в 11:11.
Ответить с цитированием
  #12 (permalink)  
Старый 06.12.2021, 11:04
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,210

Цитата:
Отсчёт месяцев month начинается с нуля 0.
Я понял про что ты...
Ответить с цитированием
  #13 (permalink)  
Старый 06.12.2021, 11:09
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,210

рони, вот смотри какая дата у тебя получается
const d1 = (new Date(1990, 11, 7)).toISOString().replace(/-/g, '')
const d2 = (new Date()).toISOString().replace(/-/g, '')
alert(d2 + '-' + d1)
alert(parseInt(d2) + '-' + parseInt(d1))
const age = Math.trunc((parseInt(d2) - parseInt(d1)) / 10000)
alert(age) // 31?

Т.е. как раз его день рождения
Ответить с цитированием
  #14 (permalink)  
Старый 06.12.2021, 11:16
Аватар для ksa
ksa ksa на форуме
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,210

рони, там временная зона "сыграла" свою роль...
Но это уже особенность JS и его "дата образования".

К самой "формуле" расчета это не имеет отношения.
Она правильно посчитает если даты будут правильные.

const d1 =19901207
const d2 = 20211206
const age = Math.trunc((d2 - d1) / 10000)
alert(age)
Ответить с цитированием
  #15 (permalink)  
Старый 06.12.2021, 11:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

ksa,
ок))) формула интересная.
Ответить с цитированием
  #16 (permalink)  
Старый 11.12.2021, 18:14
Аспирант
Отправить личное сообщение для TomWalbridge Посмотреть профиль Найти все сообщения от TomWalbridge
 
Регистрация: 24.10.2021
Сообщений: 31

Ребята, есть еще такой вопрос, по это же задаче.. я написал функцию сортировки для даты--sortColumn--, при клике на шапку таблицы, пытался назначить ее на фио и факультет, но не работает, может есть варианты повторно ее использовать, только на остальные колонки
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="css/style.css">

</head>

<body>
    <div class="container">
        <div class="filter__container">
            <h2>Показать студентов</h2>
            <ul class="filter__list">
                <li class="filter__list-item">
                    <label for="">по ФИО</label>
                    <input class="filter" type="text" id="inputFio">
                </li>
                <li class="filter__list-item">
                    <label for="fac">по факультету</label>
                    <input class="filter" type="text" id="inputFac">
                </li>
                <li class="filter__list-item">
                    <label for="date-start">по году начала обучения </label>
                    <input class="filter" type="text" id="inputDateStart">
                </li>
                <li class="filter__list-item">
                    <label for="date-end">по году окончания обучения</label>
                    <input class="filter" type="text" id="inputDateEnd">
                </li>

            </ul>
        </div>
        <form class="form">
            <h2> Добавить студента</h2>
            <ul class="list">
                <li><label for="student__name">Имя</label>
                    <input class="student" id="student__name" type="text"></li>
                <li><label for="student__sname">Фамилия</label>
                    <input class="student" id="student__sname" type="text"></li>
                <li><label for="student__lname">Отчетство</label>
                    <input class="student" id="student__lname" type="text"></li>
                <li><label for="student__bdate">Дата рождения</label>
                    <input class="student" id="student__bdate" type="date"></li>
                <li><label for="student__startLearn">Год начала обучения</label>
                    <input class="student" id="student__startLearn" type="text"></li>
                <li><label for="student__faculty">Факультет</label>
                    <input class="student" id="student__faculty" type="text"></li>
                <button onclick="onAddStudent()" type="button" class="btn-add">Добавить судента</button>
            </ul>
        </form>
        <table>
            <thead>
                <tr>
                    <th onclick="sortColumn('fioObj')">ФИО</th>
                    <th>Факультет</th>
                    <th>Дата рождения</th>
                    <th onclick="sortColumn('startlearn')">Год обучения</th>
                </tr>
            </thead>
            <tbody id="mytable"></tbody>
        </table>
    </div>
<script>
 let sortDirections = {}
 const dateLimit = '2000';
 let array = [
     { sname: 'Сидоров', fname: 'Иван', lname: 'Михайлович', bdate: '23.12.1990', startlearn: '2005', fac: 'Физики' },
     { sname: 'Сидорова', fname: 'Ивана', lname: 'Михайловна', bdate: '12.11.1994', startlearn: '2019', fac: 'Астрономии' },
     { sname: 'Сорокина', fname: 'Мария', lname: 'Алексеевна', bdate: '01.01.1992', startlearn: '2008', fac: 'Математики' },
     { sname: 'Андропов', fname: 'Александр', lname: 'Петрович', bdate: '3.10.1992', startlearn: '2003', fac: 'Информатики' },
     { sname: 'Никифоров', fname: 'Олег', lname: 'Олегович', bdate: '24.12.1995', startlearn: '2021', fac: 'Химии' }
 ]


 buildTable(array)

 function age(str) {
     let [date, month, year] = str.match(/(\d+)/g);
     --month;
     let now = new Date;
     let nowYear = now.getFullYear(),
         nowMonth = now.getMonth(),
         nowDate = now.getDate();
     return nowYear - year - (0 > (nowMonth - month || nowDate - date))
 };

 function buildTable(data) {
     let table = document.getElementById('mytable')
     table.innerHTML = '';
     let html = ''

     for (let i = 0; i < data.length; i++) {
         let fioObj = data[i].sname + " " + data[i].fname + " " + data[i].lname;
         let old = age(data[i].bdate)
         let title = titleLearn(data[i].startlearn)
         let row = `
        <tr>
        <td>${fioObj}</td>
        <td>${data[i].fac}</td>
        <td>${data[i].bdate} (${old})</td>
        <td>${title}</td>
        <tr/>
        `
         html += row


     }
     table.innerHTML = html
 }

 function sortColumn(columnName) {
     const dataType = !Number.isNaN(+array[0][columnName]) ? "number" : "string"
     if (!sortDirections[columnName]) {
         sortDirections[columnName] = false
     }
     sortDirections[columnName] = !sortDirections[columnName];

     switch (dataType) {
         case 'number':
             sortNumberColumn(sortDirections[columnName], columnName);
             break;
         case 'string':
             sortNumberColumn(sortDirections[columnName], columnName);
             break;
     }
     buildTable(array)
 }



 function sortNumberColumn(sort, columnName) {
     array = array.sort((p1, p2) => {
         return sort ? p1[columnName] - p2[columnName] : p2[columnName] - p1[columnName]
     })
 }


 function onAddStudent() {

     const inputStudentName = document.getElementById('student__name').value;
     const inputStudentSName = document.getElementById('student__sname').value;
     const inputStudentLName = document.getElementById('student__lname').value;
     const inputStudentBDate = document.getElementById('student__bdate').value;
     const inputStudentStLearn = document.getElementById('student__startLearn').value;
     const inputStudentFac = document.getElementById('student__faculty').value;

     if (inputStudentStLearn.trim().toLowerCase() <= dateLimit) {
         alert('is not a correct date')
         return
     }
     let newStudent = {
         fname: inputStudentName,
         sname: inputStudentSName,
         lname: inputStudentLName,
         bdate: inputStudentBDate,
         startlearn: inputStudentStLearn,
         fac: inputStudentFac,
     }
     console.log(newStudent);

     array.push(newStudent);
     buildTable(array);

 }

 function titleLearn(str) {
     let endYear = +str + 4;
     let now = new Date;
     let grade = now.getFullYear() - str;

     let output
     if (grade > 4) {
         output = `${str}-${endYear} (закончил)`
     } else {
         output = `${str}-${endYear} (${grade} курс)`
     }

     return output
 }
 document.querySelector('.filter__list').addEventListener("input", function() {
     let arr = array.slice(0),
         str = '';
     if (inputFio.value.trim().toLowerCase()) {
         let str = inputFio.value.trim().toLowerCase()
         arr = arr.filter(({
             sname,
             fname,
             lname
         }) => [sname, fname, lname].some(title => title.toLowerCase().includes(str)))
     }
     if (inputFac.value.trim().toLowerCase()) {
         let str = inputFac.value.trim().toLowerCase()
         arr = arr.filter(({
             fac
         }) => fac.toLowerCase().includes(str))
     }
     if (inputDateStart.value.trim().toLowerCase()) {
         let str = inputDateStart.value.trim().toLowerCase()
         arr = arr.filter(({
             startlearn
         }) => startlearn.slice(-4) == str)
     }
     if (inputDateEnd.value.trim().toLowerCase()) {
         let str = inputDateEnd.value.trim().toLowerCase()
         arr = arr.filter(({
             startlearn
         }) => +startlearn.slice(-4) + 4 == str)
     }

     buildTable(arr)
 })
</script>
</body>

</html>

Последний раз редактировалось TomWalbridge, 11.12.2021 в 18:21.
Ответить с цитированием
  #17 (permalink)  
Старый 11.12.2021, 18:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

TomWalbridge,
https://javascript.ru/forum/misc/777...tml#post509074
Ответить с цитированием
  #18 (permalink)  
Старый 13.12.2021, 19:13
Аспирант
Отправить личное сообщение для TomWalbridge Посмотреть профиль Найти все сообщения от TomWalbridge
 
Регистрация: 24.10.2021
Сообщений: 31

Спасибо!
Ответить с цитированием
  #19 (permalink)  
Старый 13.12.2021, 19:17
Аспирант
Отправить личное сообщение для TomWalbridge Посмотреть профиль Найти все сообщения от TomWalbridge
 
Регистрация: 24.10.2021
Сообщений: 31

Может ли кто может расшифровать, а именно объяснить мне значение -- $(this).data--запись в jquery в js!?
$('th').on('click', function(){
		var column = $(this).data('column')
		var order = $(this).data('order')
		var text = $(this).html()
		text = text.substring(0, text.length - 1)
Ответить с цитированием
  #20 (permalink)  
Старый 13.12.2021, 19:18
Аспирант
Отправить личное сообщение для TomWalbridge Посмотреть профиль Найти все сообщения от TomWalbridge
 
Регистрация: 24.10.2021
Сообщений: 31

var myArray = [
	    {'name':'Michael', 'age':'30', 'birthdate':'11/10/1989'},
	    {'name':'Mila', 'age':'32', 'birthdate':'10/1/1989'},
	    {'name':'Paul', 'age':'29', 'birthdate':'10/14/1990'},
	    {'name':'Dennis', 'age':'25', 'birthdate':'11/29/1993'},
	    {'name':'Tim', 'age':'27', 'birthdate':'3/12/1991'},
	    {'name':'Erik', 'age':'24', 'birthdate':'10/31/1995'},
	]

	$('th').on('click', function(){
		var column = $(this).data('column')
		var order = $(this).data('order')
		var text = $(this).html()
		text = text.substring(0, text.length - 1)

		if(order == 'desc'){
			$(this).data('order', "asc")
			myArray = myArray.sort((a,b) => a[column] > b[column] ? 1 : -1)
			text += '&#9660'

		}else{
			$(this).data('order', "desc")
			myArray = myArray.sort((a,b) => a[column] < b[column] ? 1 : -1)
			text += '&#9650'

		}
		$(this).html(text)
		buildTable(myArray)
	})

	buildTable(myArray)

	function buildTable(data){
		var table = document.getElementById('myTable')
		table.innerHTML = ''
		for (var i = 0; i < data.length; i++){
			var row = `<tr>
							<td>${data[i].name}</td>
							<td>${data[i].age}</td>
							<td>${data[i].birthdate}</td>
					  </tr>`
			table.innerHTML += row


		}
	}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить небольшую задачу kseosru Общие вопросы Javascript 1 24.11.2019 17:08
Помогите решить задачу fillika Events/DOM/Window 2 16.05.2019 11:39
Помогите решить задачу. Alex14 Javascript под браузер 2 29.03.2017 12:18
Пожалуйста помогите решить задачу на java alex01rus1991 Элементы интерфейса 9 27.11.2012 01:02
Помогите решить задачу vkg Общие вопросы Javascript 1 20.02.2008 11:59