Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Таймер AS3 - вопрос по падежам (http://www.flasher.ru/forum/showthread.php?t=210240)

FREEART 12.02.2015 16:49

Таймер AS3 - вопрос по падежам
 
ОТБЛАГОДАРЮ, ЕСЛИ ПОМОЖЕТЕ

Люди, привет. Помогите с таймером. Нашел код на форуме, поставил во флеш, вроде бы все работает нормально, отображается дата и время.

Что мне нужно сделать:
Сейчас цифры выводятся просто во флеш ролик, мне нужно, чтобы дата и цифры выводились в текстовое поле и я мог на эти текстовые поля поставить другой шрифт и также правильно должен писаться падеж, сейчас пишется "103 дней", а нужно "103 дня".

Вот выложил ссылку, как работает таймер: http://freeart.com.ua/8p/timer.html
Исходник флешки: http://freeart.com.ua/8p/timer.fla

Собственно сам код флешки:

Код AS3:

// Создаём текстовое поле для отображения данных
var time_txt:TextField = new TextField();
time_txt.autoSize = TextFieldAutoSize.LEFT;
time_txt.x=200;
time_txt.y=100;
addChild(time_txt);
 
// Задаём дату до которой вести отчёт, пишем год, потом месяц (отсчёт месяцев начинается с 0), затем пишем число
var yourDate=new Date(2015,4,27); // 01.01.2014
var yourDateMsec=yourDate.getTime();
//
function F_countDown() {
    // создаём класс Date , который отслеживает текущее время
    var nowDate = new Date();
    // Вычисляем количество милисекунд
    var nowDateMsec=nowDate.getTime();
    //
    var msec=yourDateMsec-nowDateMsec;
    // Делаем проверку на наступление даты
    if (msec<=0) {
        // Если наступило
        time_txt.text="Уже наступило";
        clearInterval(interval);
    } else {
        // Если ненаступило то продолжаем выполнение счётчика
        // Вычисляем из общего количества милисекунд, количество секунд
        var sec=Math.floor(msec/1000);
        // Вычисляем из общего количества милисекунд, количество минут
        var min=Math.floor(sec/60);
        // Вычисляем из общего количества милисекунд, количество часов
        var hour=Math.floor(min/60);
        // Вычисляем из общего количества милисекунд, количество суток
        var day=Math.floor(hour/24);
        // Отсекаем от полученных секунд остаток от деления, т.е. то число которое осталось
        // при делении на 60 так как в минуте 60 секунд
        sec%=60;
        // при делении на 60 так как в часе 60 минут
        min%=60;
        // при делении на 24 так как в сутках 24 часа
        hour%=24;
        // Записываем результат в текстовое поле
 
                var daysCase:String = ' дней ';
 
                var lastDigitDays:int = day % 10;
                var twoLastDigitDays:intday % 100;
 
                if (lastDigitDays == 1)               
                {
                        if (twoLastDigitDays!=11) daysCase = ' день ';       
                }
                else if (lastDigitDays < 5)
                {
                        if (twoLastDigitDays<12 && twoLastDigitDays>14) daysCase = ' дня ';
                }
 
        time_txt.text= day + daysCase + "\n+" + appendFirstZero(hour) + ":"
                                                        + appendFirstZero(min) + ":" + appendFirstZero(sec);
    }
}
 
function appendFirstZero(val:int) : String
{
        if (val<10) return "0" + String(val);
        else return String(val);
}
 
// Создаём setInterval для запуска нашей функции F_countDown,
// который будет запускать её раз в секунду потому что чаще нам не нужно
var interval=setInterval(F_countDown,1000);
// Запускаем функцию
F_countDown();


GBee 12.02.2015 20:56

По окончаниям, когда-то написал такую функцию:
Код AS3:

public static function getEnd(number:int, one:String = "", e234:String = "а", more:String = "ов"):String
{
        var lastDigits:String = String("00000" + number);
        var len:int = lastDigits.length;
        if(int(lastDigits.charAt(len-2))==1)
                return more;
        switch(int(lastDigits.charAt(len-1)))
        {
                case 1:
                        return one;
                case 2: case 3: case 4:
                        return e234;
        }
        return more;
}

Код AS3:

for (var i:int = 0; i < 30; i++)
{
        trace(i, StringUtils.getEnd(i, "день", "дня", "дней"))
}

Цитата:

0 дней
1 день
2 дня
3 дня
4 дня
5 дней
6 дней
7 дней
8 дней
9 дней
10 дней
11 дней
12 дней
13 дней
14 дней
15 дней
16 дней
17 дней
18 дней
19 дней
20 дней
21 день
22 дня
23 дня
24 дня
25 дней
26 дней
27 дней
28 дней
29 дней

Psycho Tiger 13.02.2015 11:44

Код:

if(int(lastDigits.charAt(len-2))==1)
Уффф...

GBee 13.02.2015 12:36

:о)) какие еще варианты?

Psycho Tiger 13.02.2015 13:53

Последняя цифра в числе (или первая?)
Код AS3:

number % 10

Пред-последняя
Код AS3:

int((number % 100) / 10)


GBee 13.02.2015 20:19

А, прикольно.
Век живи - век учись. Послал плюсик тебе в карму.

udaaff 14.02.2015 02:50

http://www.newgrounds.com/bbs/topic/1321473


Часовой пояс GMT +4, время: 09:55.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.