Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » проблема с датами в JS

Ответить
Настройки темы
проблема с датами в JS

-!-


Сообщения: 3792
Благодарности: 224

Профиль | Отправить PM | Цитировать


Вот такой скрипт:
var date = new Date();
var day = date.getDate();
var month = date.getMonth();
var yy = date.getYear();
document.write(day + " " + month + " " + yy );

выдает год на 1900 меньше, чем на самом деле. Т.е. сейчас - 105 год пишет. Где это правится?

Отправлено: 02:16, 05-07-2005

 

Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Метод getFullYear выдаст "корректное" значение ("корректное" = ожидаемое). Надо отметить, что метод getYear ведет себя как вы описали лишь в Опере (win32, как в иных платформах - не ведаю).

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 02:49, 05-07-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


-!-


Сообщения: 3792
Благодарности: 224

Профиль | Отправить PM | Цитировать


Цитата:
метод getYear ведет себя как вы описали лишь в Опере (win32, как в иных платформах - не ведаю)
под этим, наверное, надо понимать не браузер, а ту Jav'у, что идет в комплекте с Оперой?

Отправлено: 03:38, 05-07-2005 | #3


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Насколько я знаю JS и Java - разные вещи. Мы говорим о JS? Просто JS не выполняется Java машиной, скрипты работают (интерпретируются) так как того захотят производители броузера - потому такая чертополосица (как с HTML-интерпретацией) в JS скриптах по проверке броузера, версии и всего прочего.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 03:57, 05-07-2005 | #4


-!-


Сообщения: 3792
Благодарности: 224

Профиль | Отправить PM | Цитировать


я в этом не сильно-то разбраюсь
Цитата:
Насколько я знаю JS и Java - разные вещи
но это точно
Цитата:
Мы говорим о JS?
да
Цитата:
Просто JS не выполняется Java машиной, скрипты работают (интерпретируются) так как того захотят производители броузера
насколько я понимаю:
JS - интерпретируются/выполняются локально
Java - на сервере
Но для выполнения JS браузера не достаточно, я думал, что для этого и нужна Java-машина. Microsoft VM (VirtualMachine) это Java-машина?

Отправлено: 04:19, 05-07-2005 | #5


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Java программы могут выполняться не только на стороне сервера (сервлеты), но и на стороне клиента, однако в любом случае, в рамках Java машины, просто для выполнения апплетов нужно эту машину иметь локально - как раз ту, что идет (может) в поставке с Оперой. Это сторона Java. В случае с JS все проще - обработчик (интерпретатор) встроен в сам броузер и, соответственно, по разному интерпретирует код в зависимости от производителя бродилки - отсюда грабли с датами.

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 04:27, 05-07-2005 | #6


-!-


Сообщения: 3792
Благодарности: 224

Профиль | Отправить PM | Цитировать


Цитата:
отсюда грабли с датами
только у меня эти "грабли" и в Opera, и в FireFox, и в IE/MyIE...

Отправлено: 10:57, 05-07-2005 | #7


Аватара для Prisoner

Engrossed by the Void


Сообщения: 2229
Благодарности: 60

Профиль | Отправить PM | Цитировать


Забавно, давай сравнивать. Мое добро:
win2k pro sp4;
Opera 8.0;
Firefox 1.0.3;
IE 6.0 sp1.
Грабли с getYear только в Opera, getFullYear работает везде

-------
Не могу дать более дельный совет - не хватает системных ресурсов...


Отправлено: 13:41, 05-07-2005 | #8


-!-


Сообщения: 3792
Благодарности: 224

Профиль | Отправить PM | Цитировать


WinXP Corporate SP1
Opera 7.54u2 build 3929
Firefox 1.0.4
IE 6.0.2800.1106.xpsp1
getYear везде выдает 105
getFullYear еще не успел проверить

Отправлено: 14:15, 05-07-2005 | #9

mar mar вне форума

Аватара для mar

just mar


Moderator


Сообщения: 3904
Благодарности: 163

Профиль | Отправить PM | Цитировать


dascon
Цитата:
getFullYear еще не успел проверить
проверьте - Вам понравится
А Java-машина имеет отношение только к Java, а отнюдь не к JavaScript (как, собственно, уже было написано)
Про разные браузеры, getYear, getFullYear и проблему 2000 года - можно почитать у PPK (http://www.quirksmode.org/js/introdate.html) Ниже текст с этой страницы в моем переводе:
Цитата:
Проблема 2000 года

Проблема 20000-ого года хорошо известна: создатели старых программ не знали по-настоящему, что делать с новым веком. Разработанному Netscape комплексному решению не следовал полностью даже сам Netscape.

При использовании метода date.getYear(), система Netscape выдает не полный год, но его сокращенную версию. В этой системе 1997 превращается в 97, а 2000 оказывается представленным 100.

Microsoft соглашалась с этим не полностью: до 2000 Explorer вел себя так же, как и Netscape, но теперь, когда 2000-ый год наступил, Explorer 4 и 5 выдает нам значение 2000, как Year.

Netscape 3 (и только 3) следует за Explorer. Что касается других браузеров, они все, кроме WebTV, следуют за оригиналом системы Netscape.

Чтобы еще больше все усложнить, использование date.getYear() теперь считается неверным, и следует использовать date.getFullYear(), метод, который, в свою очередь, не поддерживается старыми моделями браузеров. Если метод все же работает, он в любом случае возвращает полное значение года (т.е. 2000 вместо 100).

(дальше показывают, что возвращает Ваш браузер в ответ на:

* The year according to getYear(): (у меня 105 )
* The year according to getFullYear(): ( у меня 2005 )
)

Приводится сравнение работы getYear() и getFullYear() в 24 браузерах.

Наконец, у Netscape имеется убойный баг в has one grave bug in the реализации document.lastModified. Я (не я, а PPK я только перевожу /mar/) обнаружил, что если Вы используете getYear() для этой даты, то Netscape выдает 0 вместо 100, а если используется getFullYear(), то Вы получаете 1900 вместо 2000.

Высчитываем полный год

Огромное спасибо E minor за предоставленную формулу.

К счастью, имеется простое решение этой весьма важной проблемы. Поскольку getYear() поддерживается всеми браузерами, всегда используйте этот метод. Поделите результат на 100 и возьмите модуль так, чтобы получить значение от 0 до 99. Если число меньше 38, прибавьте 2000, если большеi - прибавьте 1900. Такой способ всегда дает правильное значение.

Таким образом, для расчета значения года используем функцию:

Код: Выделить весь код
function takeYear(theDate)
{
	x = theDate.getYear();
	var y = x % 100;
	y += (y < 38) ? 2000 : 1900;
	return y;
}
(Почему 38? Потому, что значение Epoch Time заканчивается в 2038. Можно также использовать

Код: Выделить весь код
(y > 69) ? 1900: 2000;
потому, что Epoch Time системы может быть до 1970).

Передаем объект Date в функцию, как:

var today = new Date();
Year = takeYear(today);

Теперь Year содержит правильное значение (в данном случае 2005) и мы с успехом решили проблему 2000 года.

Последний раз редактировалось mar, 07-07-2005 в 01:49.


Отправлено: 00:12, 07-07-2005 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » проблема с датами в JS

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Проблема установки Adobe Flash Player и проблема Windows Live RubinSky Microsoft Windows 7 3 26-03-2009 21:23
[решено] "Мигалка". работа с датами в JS, PHP Artem-Samsung Вебмастеру 1 31-01-2009 01:10
Прочие БД - Расчет полей с датами и передачи строк в отчет. crem78 Программирование и базы данных 0 09-08-2008 07:34
Ошибка - Странная проблема с кодировкой(похоже проблема с преобразованием кодировок) Mertvii Microsoft Windows 2000/XP 1 13-07-2008 16:05
Как быстро и точно определить, в чём проблема? Явная проблема в железе UTU Непонятные проблемы с Железом 16 22-05-2006 01:27




 
Переход