Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение формата даты, установленный в системе 
:(
    Опции темы
href
Дата 4.12.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



Как определить средствами JavaScript краткую форму формата даты, установленного в системе у пользователя?
Например, в России принят формат 25.11.2006, тогда как для США актуален 11/25/2006.
PM MAIL WWW ICQ Skype GTalk   Вверх
12345c
Дата 4.12.2006, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



В разных браузерах, говорят, по-разному работает toLocaleString() . В Win "в лоб" не получается. Но "по лбу" - (IE):

Код

<script language=VBScript>
a= Now&""
</script>
<script language=javascript>alert([new Date().toLocaleString()  ,'<==JS;VBS==>',self.a]);
</script>


PM WWW   Вверх
SelenIT
Дата 4.12.2006, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 49
Всего: 401



На правах безумной идеи: что, если сделать toLocaleString() для сегодняшней даты, а потом попытаться распрасить результат - найти в нем позицию сегодняшних числа, месяца и года, соответственно все оставшееся - разделители. Если результат неоднозначен (скажем, 06.06.2006) - берем завтрашнюю дату и делаем то же самое, если даже тогда неоднозначность не пропала (напр. 06.06.06 - кстати, так бывает?) - берем дату через год и однозначно определяем последний элемент... Есть подводные камни?


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Stampede
Дата 4.12.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 4
Всего: 144



Цитата(href @  4.12.2006,  07:53 Найти цитируемый пост)
Как определить средствами JavaScript краткую форму формата даты, установленного в системе у пользователя?


Вопрос: для чего это нужно и в каком виде предполагается получит формат. Если, например, нужно что-то вида "dd.MM.yyyy"? то я бы применил способ, предложенный SelenIT. Единственное, я бы использовал не текущую, а некую фиксированную контрольную дату, например 25.11.2006.

Кстати, чтобы не совать вычисленный формат во всякие случайные переменные, можно оформить его как свойство типа Date:

Код

Date.prototype.__calculateShortFormat = function() {
  // your code here
};
Date.prototype.shortFormat = this.__calculateShortFormat();


А еще советую почитать описание одного интересного подхода к форматированию дат в JavaScript'е, который оформлен в виде LGPL библиотеки Xaprb. На этом же сайте автор, Baron Schwartz, приводит результаты бенчмарка пяти разных баблиотек, так или иначе позволяющих форматировать даты. И хотя мы все знаем, что бывает просто ложь, наглая ложь и бенчмарки, но все равно результаты выходят интересные ^)


--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
12345c
Дата 4.12.2006, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



SelenIT, Stampede, вы о чём-то не о том, случайно, оба под не-Win сидите?

В WinXP проблема в том, что toLocaleString() даёт полный формат даты, а нужен сокращённый, который хранится в локалях системы и мог быть установлен пользователем.

У меня строчка моего примера даёт (для моих настроек локали):
Код
4дек2006,Пн 23:12:15,<==JS;VBS==>,04.12.2006 23:12:15
И никакими силами нельзя вызвать из JS сокращённый формат локали, узнать, что юзер туда прописал. В то время как из VBS вызывается тот и другой.
PM WWW   Вверх
Stampede
Дата 5.12.2006, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

Репутация: 4
Всего: 144



Цитата(12345c @  4.12.2006,  13:15 Найти цитируемый пост)
И никакими силами нельзя вызвать из JS сокращённый формат локали, узнать, что юзер туда прописал.


А, ну эт плохо, конечно. Может просто в зависимости от локали выводить либо по-америкосовски, M/d/y, либо по-нашему, d-M-y. Только как узнать, какая у юзера локаль?
PM WWW   Вверх
12345c
Дата 5.12.2006, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Опять же, в VBS есть GetLocale - SetLocale.
PM WWW   Вверх
href
Дата 5.12.2006, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



В общем, получился коротенький скриптик.

Код

//1 - MM.dd.yyyy
//2 - dd.MM.yyyy    
//3 - yyyy.MM.dd    
//4 - yyyy.dd.MM

function getdateformat () {
    d=new Date(1980,10,25); 
    st=d.toLocaleDateString();                    
    yd=st.search("1980")-st.search("25");        
    return (1+(yd<0)*2+(yd>5||yd<-7));                
}    
alert(getdateformat());

PM MAIL WWW ICQ Skype GTalk   Вверх
12345c
Дата 5.12.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



??? А зачем? Форматов локалей всё равно намного больше. Например, "25 декабря 1980", "25дек80".
PM WWW   Вверх
href
Дата 5.12.2006, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



Цитата(12345c @ 5.12.2006,  15:03)
??? А зачем? Форматов локалей всё равно намного больше. Например, "25 декабря 1980", "25дек80".

Я так понимаю, "локали", это в VBS? К сожалению, он не подходит, потому как хочется, чтобы скрипт наботал не только в IE. В любом случае спасибо.
PM MAIL WWW ICQ Skype GTalk   Вверх
12345c
Дата 5.12.2006, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Локалью называется совокупность настроек пользователя в системе, связанная с языком и национальностью. Раскладки, форматы дат, чисел, язык. Это системное понятие, описывается числом или строчкой типа "ru", "en-us". Может корректироваться юзером в системе. VBS может читать варианты форматов, а JS выдаёт один. Но вопрос в другом - тот, который Вы использовали, есть формат развёрнутой даты, а распознать пытаетесь краткий формат и только русский. Зачем закладывать заведомую ошибку?

Добавлено @ 19:13 
(Поиск по и-нету по слову "locale")
PM WWW   Вверх
href
Дата 6.12.2006, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 25.10.2006
Где: Moscow

Репутация: нет
Всего: нет



Цитата(12345c @ 5.12.2006,  19:12)
Локалью называется совокупность настроек пользователя в системе, связанная с языком и национальностью. Раскладки, форматы дат, чисел, язык. Это системное понятие, описывается числом или строчкой типа "ru", "en-us". Может корректироваться юзером в системе. VBS может читать варианты форматов, а JS выдаёт один. Но вопрос в другом - тот, который Вы использовали, есть формат развёрнутой даты, а распознать пытаетесь краткий формат и только русский. Зачем закладывать заведомую ошибку?

Добавлено @ 19:13 
(Поиск по и-нету по слову "locale")

К сожалению, способа получения краткого формата без использования VBS пока не нашёл, потому и используется полный формат. В полном формате тот же порядок следования числа, месяца и года, что и в кратком. Разделители, к сожалению, из полного формата получить невозможно. Принцип работает не только для "русского" формата, но для любого возвращаемого системой.
PM MAIL WWW ICQ Skype GTalk   Вверх
12345c
Дата 6.12.2006, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Принцип? По умолчанию - может быть, хотя вне компьютеров не всегда ("6th of December"), но пользователь может поставить какой угодно формат через строку формата в системе.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1957 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.