14.03.2013, 21:00
|
Интересующийся
|
|
Регистрация: 28.02.2013
Сообщений: 23
|
|
проблема з типами
не подкажете где ошибка ?
есть подозрение что переменние month2,day2,year2-строчки.Я решил их умножить на 1 чтоби преоброзовать в число, но не получается.
И да я знаю что ето неполноценний и неправильний таймер
<HTML>
<HEAD>
</HEAD>
<BODY onload="now();">
<br>
<SCRIPT>
nown = new Date();
var monthlessn = nown.getMonth() + 1;
document.write("Сьогодні " + nown.getDate() + "-го " + monthlessn + " Місяць " + nown.getFullYear() + " рік " + nown.getHours() + " година ")
function go()
{
now = new Date();
var day2 = 0;
var day = 0;
var dayless = now.getDate();
var month2 = 0;
var month = 0;
var monthless = monthlessn;
var year2 = 0;
var year = 0;
var yearless = now.getFullYear();
month2 == (month*1)-monthless;
day2 == (day*1)-dayless;
year2 == (year*1)-yearless;
alert(day2 + " днів " + month2 + " місяців " + year2 + "рокiв")
}
</SCRIPT>
<br>
<br>
Введіть день :
<select onChange="day=+this.value;alert(day)">
<option value="1" selected="selected">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
<option value="5">5
</option>
<option value="6">6
</option>
<option value="7">7
</option>
<option value="8">8
</option>
<option value="9">9
</option>
<option value="10">10
</option>
<option value="11">11
</option>
<option value="12">12
</option>
<option value="13">13
</option>
<option value="14">14
</option>
<option value="15">15
</option>
<option value="16">16
</option>
<option value="17">17
</option>
<option value="18">18
</option>
<option value="19">19
</option>
<option value="20">20
</option>
<option value="21">21
</option>
<option value="22">22
</option>
<option value="23">23
</option>
<option value="24">24
</option>
<option value="25">25
</option>
<option value="26">26
</option>
<option value="27">27
</option>
<option value="28">28
</option>
<option value="29">29
</option>
<option value="30">30
</option>
<option value="31">31
</option>
</select>
Введіть місяць :
<select onChange="month=+this.value;alert(month)">
<option value="1" selected="selected">Січень
</option>
<option value="2">Лютий
</option>
<option value="3">Березень
</option>
<option value="4">Квітень
</option>
<option value="5">Травень
</option>
<option value="6">Червень
</option>
<option value="7">Липень
</option>
<option value="8">Серпень
</option>
<option value="9">Вересень
</option>
<option value="10">Жовтень
</option>
<option value="11">Листопад
</option>
<option value="12">Грудень
</option>
</select>
Введіть рік :
<select onChange="year=+this.value;alert(year)">
<option value="2013" selected="selected">2013
</option>
<option value="2014">2014
</option>
<option value="2015">2015
</option>
<option value="2016">2016
</option>
<option value="2017">2017
</option>
<option value="2018">2018
</option>
<option value="2019">2019
</option>
<option value="2020">2020
</option>
<option value="2021">2021
</option>
<option value="2022">2022
</option>
<option value="2023">2023
</option>
<option value="2024">2024
</option>
</select>
<br>
<INPUT TYPE="button" VALUE="Розрахунок" onClick="go()">
<br>
</BODY>
</HTML>
|
|
14.03.2013, 21:38
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
Сообщение от I_nub
|
есть подозрение что переменние month2,day2,year2-строчки
|
есть подозрение что эти переменные внутри функции а там они как за каменной стеной недостучатся.Видимость однако называется.
|
|
14.03.2013, 21:42
|
Интересующийся
|
|
Регистрация: 28.02.2013
Сообщений: 23
|
|
Сообщение от рони
|
есть подозрение что эти переменные внутри функции а там они как за каменной стеной недостучатся.Видимость однако называется.
|
И что посоветуеш ?
|
|
14.03.2013, 21:43
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от I_nub
|
Я решил их умножить на 1 чтоби преоброзовать в число
|
для это умножать не нужно, способов море:
var a = "12345";
alert([a, typeof a]);
alert([~~a, typeof ~~a]);
alert([+a, typeof +a]);
alert([a >> 0, typeof (a >> 0)]);
|
|
14.03.2013, 21:47
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,109
|
|
I_nub,
обьяви переменные которые меняешь вне функции -- будут они глобально видимы -- потом научишься внутря прятать.
|
|
14.03.2013, 22:00
|
Интересующийся
|
|
Регистрация: 28.02.2013
Сообщений: 23
|
|
Сообщение от рони
|
I_nub,
обьяви переменные которые меняешь вне функции -- будут они глобально видимы -- потом научишься внутря прятать.
|
Спасибо.
|
|
15.03.2013, 10:47
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Сообщение от devote
|
для это умножать не нужно, способов море:
|
Только надо не забывать, что только второй способ преобразует в "то же" число, первый и третий преобразует в 32-битное целое, т.е. отбрасывает дробную часть:
var a = "3.14159";
alert([a, typeof a]);
alert([~~a, typeof ~~a]);
alert([+a, typeof +a]);
alert([a >> 0, typeof (a >> 0)]);
хотя в данном конкретном случае это не существенно, числа и так целые.
|
|
16.03.2013, 04:08
|
|
Профессор
|
|
Регистрация: 11.09.2010
Сообщений: 8,804
|
|
Я недавно узнал еще такой способ:
var a = "3.14159";
alert([a|0, typeof (a|0)]);
|
|
16.03.2013, 17:50
|
|
Профессор
|
|
Регистрация: 28.02.2011
Сообщений: 349
|
|
Все битовые операции (&, |, ^, ~, сдвиги) делают следующее:
1. Преобразуют операнд (в нашем случае строка) в число.
2. У полученного числа отбрасывают дробную часть, а от целой части оставляют только 32 младших бита, старшие отбрасывают.
3. С полученным числом делают указанную операцию.
4. Результат трактуется как 32-битное целое со знаком.
Желающие могут поэкспериментировать, для экспериментов взять числа два миллиарда (с ним все будет нормально), три миллиарда (а вот оно уже в 31 бит не помещается, а значит будет единичка в бите, который трактуется как знаковый), пять миллиардов (оно в 32 бита не влазит никак).
Наверно, лучше все-же пользоваться плюсом, битовые операции не только теряют дробную часть, но и делают ненужные действия, даже если сами по себе битовые операции быстрые, то преобразование числа из плавающего формата в целый и затем обратно - дополнительная потеря времени. Хотя сам ничего не замерял, так что рассуждения чисто теоретические :-)
Последний раз редактировалось rgl, 16.03.2013 в 17:55.
|
|
|
|