Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   День недели, как вывести на экран? (https://javascript.ru/forum/misc/77226-den-nedeli-kak-vyvesti-na-ehkran.html)

Besprizornik 14.04.2019 23:07

Цитата:

Сообщение от Rise
В старых браузерах может не работать display:none для option. Обнови браузер.

обновить браузер несложно, сложнее заставить всех посетителей это сделать, а скорее всего даже невозможно.

Цитата:

Сообщение от Rise
В текстовых редакторах есть функции Найти и Заменить текст, давай ты их освоишь.

нашёл 105 строку, сейчас при нажатии на кнопку 01.01 45г до н.э. конвертируется, но селект с днем недели пуст

Rise 15.04.2019 00:35

Цитата:

Сообщение от Besprizornik
сложнее заставить всех посетителей это сделать

Сейчас такая тенденция, что браузеры обновляются автоматически, из настроек убрали отключение обновления. Так что, если посетителю нравится страдать от своего устаревшего браузера, то это его личный выбор.
Цитата:

Сообщение от Besprizornik
но селект с днем недели пуст

Ну опечатка, мог бы догадаться, C.wDay.innerHTML = o на C.gwDay.innerHTML = C.jwDay.innerHTML = o

Besprizornik 15.04.2019 12:01

Цитата:

Сообщение от Rise (Сообщение 506534)
Сейчас такая тенденция, что браузеры обновляются автоматически, из настроек убрали отключение обновления. Так что, если посетителю нравится страдать от своего устаревшего браузера, то это его личный выбор.

Неужели так сложно вывести одну единственную опцию, а лишние скрыть, или это нельзя сделать с помощью яваскрипт?

Цитата:

Сообщение от Rise (Сообщение 506534)
Ну опечатка, мог бы догадаться, C.wDay.innerHTML = o на C.gwDay.innerHTML = C.jwDay.innerHTML = o

C.wDay.innerHTML = o на C.gwDay.innerHTML = C.jwDay.innerHTML = o ? или Days? не показывает день недели а не число, скорее надо
C.wDays.innerHTML = o на C.gwDays.innerHTML = C.jwDays.innerHTML = o

Rise 15.04.2019 15:40

Цитата:

Сообщение от Besprizornik
это нельзя сделать с помощью яваскрипт?

Можно, но это не значит что надо постоянно редактировать js, когда это можно сделать через css. Вчера примеры с обычным списком дней недели, сегодня список с одной опцией, завтра просто поле вывода, а послезавтра снова список со всеми опциями, потому что раньше ты считал преждевременно это решать. Поэтому я как кандидат в экстрасенсы, оставлю тебе обычный список, так как его можно легко стилизовать в любое из этих твоих состояний без редактирования js.
Цитата:

Сообщение от Besprizornik
или Days? не показывает день недели а не число

Типа стоит "день недели" в единственной числе, поэтому мы напишем Days во множественном. И где здесь логика?

Besprizornik 15.04.2019 21:27

Цитата:

Сообщение от Rise (Сообщение 506566)
Можно, но это не значит что надо постоянно редактировать js, когда это можно сделать через css. Вчера примеры с обычным списком дней недели, сегодня список с одной опцией, завтра просто поле вывода, а послезавтра снова список со всеми опциями, потому что раньше ты считал преждевременно это решать. Поэтому я как кандидат в экстрасенсы, оставлю тебе обычный список, так как его можно легко стилизовать в любое из этих твоих состояний без редактирования js.

можно попробовать прочитать первый пост данной темы, там речь шла о абсолютно пустым списке без опций поверх которого расположен спан с днём недели, что выглядит как список с одной опцией, но если на яваскрипт можно обойтись без спан'а, только списком с одной опцией, то зачем какие-то костыли со спанами?

оставить список со всеми опциями, это выглядит как во времена застоя при союзе, сначала создаём проблемы через js, потом с переменным успехом будем решать их через css, или как в армии – круглое носим, квадратное катаем,

если конечно это возможно, я бы предпочёл чтобы я один раз описал полностью что я хочу от скрипта, один раз отредактировать js, и поставить на этом точку, если потом и будет редактироваться что либо то это только css цвет текста/фона и подобное...

Цитата:

Сообщение от Rise (Сообщение 506566)
Типа стоит "день недели" в единственной числе, поэтому мы напишем Days во множественном. И где здесь логика?

но Day в твоём скрипте это число, а Days день недели.

Rise 15.04.2019 22:51

Цитата:

Сообщение от Besprizornik
если потом и будет редактироваться что либо то это только css цвет текста/фона и подобное...

Вот потом и отредактируешь css для select disabled наравне с остальными select к единому виду, нет никаких проблем.

Besprizornik 15.04.2019 23:52

Цитата:

Сообщение от Rise (Сообщение 506534)
Ну опечатка, мог бы догадаться, C.wDay.innerHTML = o на C.gwDay.innerHTML = C.jwDay.innerHTML = o

84 строку давно исправил...

Цитата:

Сообщение от Rise
Типа стоит "день недели" в единственной числе, поэтому мы напишем Days во множественном. И где здесь логика?

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Конвертировать дату из григорианского календаря в юлианский и обратно.</title>
<style>
body, div, span, select, input, button { font: 16px serif; }
div { padding : 5px; margin: 0 5px 5px 5px; border: 1px solid #999; }
.position { display: inline-block; padding: 0; margin: 0 0 5px 0; position: relative; border: none; }
.gwDay, .jwDay { width: 136px; }
.weekday { display: inline-block; position: relative; right: 132px; top : 1px; }
.date { white-spage: nowrap; padding: 0; margin: 0 0 5px 0; border: none; }
</style>
</head>
<body>
<form name="converter">
    <div>
    <span>Сегодня:</span><br>
    <div class="position">
   <select name="gwDay" class="gwDay"></select>
    <span class="weekday"></span>
    </div>
    <div class="date">
    <select name="gDay"></select>
    <select name="gMonth"></select>
    <input type="number" name="gYear" size="5" min="-4713">
    <i>г.</i>
    <select name="gEra"></select></div>
по григорианскому календарю<br>(<i>новый стиль</i>).<br>
    <input type="button" name="gCalc" value="Смотреть"> 
    <button type="button" class="express" value="g_n_o_w_ce">Сбросить</button>
    </div>
    <div>
    <span>Сегодня:</span><br>
    <div class="position">
   <select name="jwDay" class="jwDay"></select>
    <span class="weekday"></span>
    </div>
    <div class="date">
    <select name="jDay"></select>
    <select name="jMonth"></select>
    <input type="number" name="jYear" size="5" min="-4712">
    <i>г.</i>
    <select name="jEra"></select></div>
по юлианскому календарю<br>(<i>старый стиль</i>).<br>
    <input type="button" name="jCalc" value="Смотреть"> 
    <button type="button" class="express" value="g_n_o_w_ce">Сбросить</button>
    </div>
    <div>
    Впервые григорианский календарь был введён папой римским Григорием XIII в католических странах  с 5 октября 1582 года взамен прежнего юлианского: следующим днём после четверга 4 октября стала <button type="button" class="express" value="g_15_10_1582_ce">пятница 15 октября 1582 г. н. э.</button>. Григорианский календарь используется в большинстве государств и стран мира. В литературе также применяется название — Новый стиль.
      </div>
      <div>
    Пролептический григорианский календарь (предваряющий григорианский календарь, от др.-греч. πρόληψις «предвосхищение») — календарь, расширяющий григорианский календарь на период до его введения 15 октября 1582 года.
      </div>
      <div>
	    Юлиа́нский  календа́рь — календарь, разработанный группой александрийских астрономов во главе с Созигеном. Календарь назван в честь Юлия Цезаря, по указу которого был введен в Римской империи с <button type="button" class="express" value="j_1_1_45_bce">1 января 45 г. до н. э.</button> Год по юлианскому календарю начинается 1 января, так как именно в этот день с 153 года до н. э. избранные комициями консулы вступали в должность. Юлианский календарь заменил старый римский календарь и основывался на астрономической культуре эллинистического Египта.
</div>
</form>
<script>
document.addEventListener('DOMContentLoaded', function () {
// https://en.wikipedia.org/wiki/Julian_day#Julian_day_number_calculation
// The algorithms are valid for JDN >= 0, Gregorian >= 24.11.-4713, Julian >= 01.01.-4712
function gregorianToJdn(d, m, y) {
    return tr((1461 * (y + 4800 + tr((m - 14) / 12))) / 4) +
           tr((367 * (m - 2 - 12 * tr((m - 14) / 12))) / 12) -
           tr((3 * tr((y + 4900 + tr((m - 14) / 12)) / 100)) / 4) + d - 32075;
}
function julianToJdn(d, m, y) {
    return 367 * y - tr((7 * (y + 5001 + tr((m - 9) / 7))) / 4) + tr((275 * m) / 9) + d + 1729777;
}
function jdnToJulianOrGregorian(j, to) { // to: true (julian) false (gregorian)
    var f = (to) ? (j + 1401) : (j + 1363 + tr((tr((4 * j + 274277) / 146097) * 3) / 4));
    var e = 4 * f + 3, h = 5 * tr((e % 1461) / 4) + 2;
    var d = tr((h % 153) / 5) + 1, m = ((tr(h / 153) + 2) % 12) + 1, y = tr(e / 1461) - 4716 + tr((14 - m) / 12);
    return { d: d, m: m, y: y }; 
}
function jdnToWeekDay(j) { return (j % 7) + 1; }
function tr(n) { return n - n % 1; } // truncate (for integer division)
// -- wiki end --
var C = document.converter;
// options
var wdays = ['Понедельник','Вторник','Среда','Четверг','Пятница','Суббота','Воскресенье'];
for (var o = '', i = 0; i < wdays.length; i++) o += '<option value="' + (i + 1) + '">' + wdays[i] + '</option>';

C.gwDay.value = C.jwDay.value = o
for (var o = '', i = 1; i <= 31; i++) o += '<option value="' + i  + '">' + i + '</option>';
C.gDay.innerHTML = C.jDay.innerHTML = o;
var months = ['января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'];
for (var o = '', i = 0; i < months.length; i++) o += '<option value="' + (i + 1) + '">' + months[i] + '</option>';
C.gMonth.innerHTML = C.jMonth.innerHTML = o;
var eras = ['н. э.','до н. э.'], _eras = ['ce','bce'];
for (var o = '', i = 0; i < eras.length; i++) o += '<option value="' + _eras[i] + '">' + eras[i] + '</option>';
C.gEra.innerHTML = C.jEra.innerHTML = o;
// -- options end --
C.gCalc.onclick = function () {
    var gd = +C.gDay.value, gm = +C.gMonth.value, gy = historicalToAstronomical(+C.gYear.value, C.gEra.value);
    var jdn = gregorianToJdn(gd, gm, gy), wd = jdnToWeekDay(jdn), jd = jdnToJulianOrGregorian(jdn, true);
    var jy = astronomicalToHistorical(jd.y);
    C.gwDay.value = C.jwDay.value = wd, C.jDay.value = jd.d, C.jMonth.value = jd.m, C.jYear.value = jy.y, C.jEra.value = jy.e;
    onUpdateAll(jdn);
};
C.jCalc.onclick = function () {
    var jd = +C.jDay.value, jm = +C.jMonth.value, jy = historicalToAstronomical(+C.jYear.value, C.jEra.value);
    var jdn = julianToJdn(jd, jm, jy), wd = jdnToWeekDay(jdn), gd = jdnToJulianOrGregorian(jdn, false);
    var gy = astronomicalToHistorical(gd.y);
    C.gwDay.value = C.jwDay.value = wd, C.gDay.value = gd.d, C.gMonth.value = gd.m, C.gYear.value = gy.y, C.gEra.value = gy.e;
    onUpdateAll(jdn);
};
function initDate(c, d, m, y, e) {
    if (d + m + y == 'now') { var n = new Date(); d = n.getDate(), m = n.getMonth() + 1, y = n.getFullYear(); }
    C[c + 'Day'].value = d, C[c + 'Month'].value = m, C[c + 'Year'].value = y, C[c + 'Era'].value = e;
    C[c + 'Calc'].onclick();
}
function historicalToAstronomical(y, e) { // e: 'ce' or 'bce'
    e = (y < 1) ? 'bce' : e;
    return ((e == 'bce') && y > 0) ? (1 - y) : y;
}
function astronomicalToHistorical(y) {
    var e = (y < 1) ? 'bce' : 'ce';
    return { y: (e == 'bce') ? -(y - 1) : y, e: e };
}
for (var ess = C.querySelectorAll('.express'), es, i = 0; i < ess.length; i++) {
     es = ess[i], es.onclick = Function.prototype.apply.bind(initDate, null, es.value.split('_'));
}
initDate('g', 'n', 'o', 'w', 'ce');
function onUpdateAll(jdn) {
    console.log('JDN:', jdn);
    console.assert(jdn >= 2299161, 'Proleptic: Gn < 15.10.1582 CE');
    console.assert(jdn >= 1704987, 'Proleptic: Jn < 01.01.45 BCE');
    console.assert(jdn >= 0, 'Invalid: Gn < 24.11.4714 BCE, Jn < 01.01.4713 BCE');
}
});
</script>
</body>
</html>


не могу понять почему не показывает день недели?

Besprizornik 16.04.2019 20:43

Rise,
неужели так трудно сказать какие строчки надо исправить и как

Besprizornik 16.04.2019 23:04

Rise в 38 посте сделал как ты сказал, 85 и 87 строчки исправил, что ещё не так?


Часовой пояс GMT +3, время: 05:30.