Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Функция для перевода размера из байтов в понятный для человека формат (https://javascript.ru/forum/project/37030-funkciya-dlya-perevoda-razmera-iz-bajjtov-v-ponyatnyjj-dlya-cheloveka-format.html)

Антон Крамолов 04.04.2013 22:18

Функция для перевода размера из байтов в понятный для человека формат
 
/**
 * Возвращает размер в байтах в понятном для человека формате.
 *
 * @author [email]tz4678@gmail.com[/email]
 * @param size размер в байтах, целое число
 * @param std стандарт, 'SI' | 'IEC'
 * @return string
 */
function formatSize(size, std) {
    if (std) std = std.toLowerCase();
    var i = 0, 
        base = std == 'si' ? 1000 : 1024, 
        prefixes = ' KMGTPEZY';
    
    if (size < 1) {
        return 0;
    }
    else if (size >= base) {
        i = Math.floor( Math.log(size) / Math.log(base) );
        if (i >= prefixes.length) return 'N/A';
        size = ( size / Math.pow(base, i) ).toFixed(2) * 1 + ' ';
    }
    
    return size + prefixes[i] + ( std == 'iec' && i ? 'i' : '' ) + 'B';
}


Примеры:

formatSize(1234567890)
"1.15 GB"
formatSize(1234567890, 'iec')
"1.15 GiB"
formatSize(1234567890, 'si')
"1.23 GB"

Антон Крамолов 05.04.2013 13:44

Тож моё

function pluralize(count, base, ending1, ending2, ending3) { if (ending3 === undefined) { base += count == 1? ending1 : ending2; } else { var _ = count % 100 > 20 ? count % 10 : count; base += _ == 0 || _ > 4 ? ending3 : _ > 1 ? ending2 : ending1; } return count + ' ' + base; }
undefined
pluralize(0, 'comment', '', 's')
"0 comments"
pluralize(1, 'comment', '', 's')
"1 comment"
pluralize(3, 'comment', '', 's')
"3 comments"
pluralize(1, 'wol', 'f', 'ves')
"1 wolf"
pluralize(2, 'wol', 'f', 'ves')
"2 wolves"
pluralize(1, 'волк', '', 'а', 'ов') + ' и ' + pluralize(7, 'козл', 'енок', 'енка', 'ят')
"1 волк и 7 козлят"
pluralize(1, 'робот', '', 'а', 'ов')
"1 робот"
pluralize(113, 'робот', '', 'а', 'ов')
"113 роботов"
pluralize(244, 'робот', '', 'а', 'ов')
"244 робота"
pluralize(576, 'робот', '', 'а', 'ов')
"576 роботов"

Антон Крамолов 05.04.2013 14:38

/**
 * Склоняет слово в зависимости от количества.
 * 
 * @param count количество
 * @param base основа слова
 * @param ending1 окончание для ед.ч.
 * @param ending2 окончание для мн.ч.
 * @param ending3 еще одно окончание для мн.ч., если не задано, то слово 
 * склоняется как в английском
 * @return string
 */
function pluralize(count, base, ending1, ending2, ending3) { 
    base = count + ' ' + base;
    
    if (ending3 === undefined) { 
        return base + ( count == 1? ending1 : ending2 ); 
    }
    
    count = count % 100;
    count = count > 20 ? count % 10 : count; 
    return base + ( count == 0 || count > 4 ? ending3 : count > 1 ? ending2 : ending1 ); 
}

var i = 99;

while (i) {
    var qt = pluralize(i, 'бутыл', 'ка', 'ки', 'ок');
    console.log( qt + ' пива на стене\n' + qt + ' бутылок пива!\nВозьми одну, пусти по кругу\n' + pluralize(--i, 'бутыл', 'ка', 'ки', 'ок') + ' пива на стене!\n\n');
}


99 бутылок пива на стене
99 бутылок бутылок пива!
Возьми одну, пусти по кругу
98 бутылок пива на стене!

98 бутылок пива на стене
98 бутылок бутылок пива!
Возьми одну, пусти по кругу
97 бутылок пива на стене!

97 бутылок пива на стене
97 бутылок бутылок пива!
Возьми одну, пусти по кругу
96 бутылок пива на стене!

96 бутылок пива на стене
96 бутылок бутылок пива!
Возьми одну, пусти по кругу
95 бутылок пива на стене!

95 бутылок пива на стене
95 бутылок бутылок пива!
Возьми одну, пусти по кругу
94 бутылки пива на стене!

94 бутылки пива на стене
94 бутылки бутылок пива!
Возьми одну, пусти по кругу
93 бутылки пива на стене!

93 бутылки пива на стене
93 бутылки бутылок пива!
Возьми одну, пусти по кругу
92 бутылки пива на стене!

92 бутылки пива на стене
92 бутылки бутылок пива!
Возьми одну, пусти по кругу
91 бутылка пива на стене!

91 бутылка пива на стене
91 бутылка бутылок пива!
Возьми одну, пусти по кругу
90 бутылок пива на стене!

90 бутылок пива на стене
90 бутылок бутылок пива!
Возьми одну, пусти по кругу
89 бутылок пива на стене!

89 бутылок пива на стене
89 бутылок бутылок пива!
Возьми одну, пусти по кругу
88 бутылок пива на стене!

88 бутылок пива на стене
88 бутылок бутылок пива!
Возьми одну, пусти по кругу
87 бутылок пива на стене!

87 бутылок пива на стене
87 бутылок бутылок пива!
Возьми одну, пусти по кругу
86 бутылок пива на стене!

86 бутылок пива на стене
86 бутылок бутылок пива!
Возьми одну, пусти по кругу
85 бутылок пива на стене!

85 бутылок пива на стене
85 бутылок бутылок пива!
Возьми одну, пусти по кругу
84 бутылки пива на стене!

84 бутылки пива на стене
84 бутылки бутылок пива!
Возьми одну, пусти по кругу
83 бутылки пива на стене!

83 бутылки пива на стене
83 бутылки бутылок пива!
Возьми одну, пусти по кругу
82 бутылки пива на стене!

82 бутылки пива на стене
82 бутылки бутылок пива!
Возьми одну, пусти по кругу
81 бутылка пива на стене!

81 бутылка пива на стене
81 бутылка бутылок пива!
Возьми одну, пусти по кругу
80 бутылок пива на стене!

80 бутылок пива на стене
80 бутылок бутылок пива!
Возьми одну, пусти по кругу
79 бутылок пива на стене!

79 бутылок пива на стене
79 бутылок бутылок пива!
Возьми одну, пусти по кругу
78 бутылок пива на стене!

78 бутылок пива на стене
78 бутылок бутылок пива!
Возьми одну, пусти по кругу
77 бутылок пива на стене!

77 бутылок пива на стене
77 бутылок бутылок пива!
Возьми одну, пусти по кругу
76 бутылок пива на стене!

76 бутылок пива на стене
76 бутылок бутылок пива!
Возьми одну, пусти по кругу
75 бутылок пива на стене!

75 бутылок пива на стене
75 бутылок бутылок пива!
Возьми одну, пусти по кругу
74 бутылки пива на стене!

74 бутылки пива на стене
74 бутылки бутылок пива!
Возьми одну, пусти по кругу
73 бутылки пива на стене!

73 бутылки пива на стене
73 бутылки бутылок пива!
Возьми одну, пусти по кругу
72 бутылки пива на стене!

72 бутылки пива на стене
72 бутылки бутылок пива!
Возьми одну, пусти по кругу
71 бутылка пива на стене!

71 бутылка пива на стене
71 бутылка бутылок пива!
Возьми одну, пусти по кругу
70 бутылок пива на стене!

70 бутылок пива на стене
70 бутылок бутылок пива!
Возьми одну, пусти по кругу
69 бутылок пива на стене!

69 бутылок пива на стене
69 бутылок бутылок пива!
Возьми одну, пусти по кругу
68 бутылок пива на стене!

68 бутылок пива на стене
68 бутылок бутылок пива!
Возьми одну, пусти по кругу
67 бутылок пива на стене!

67 бутылок пива на стене
67 бутылок бутылок пива!
Возьми одну, пусти по кругу
66 бутылок пива на стене!

66 бутылок пива на стене
66 бутылок бутылок пива!
Возьми одну, пусти по кругу
65 бутылок пива на стене!

65 бутылок пива на стене
65 бутылок бутылок пива!
Возьми одну, пусти по кругу
64 бутылки пива на стене!

64 бутылки пива на стене
64 бутылки бутылок пива!
Возьми одну, пусти по кругу
63 бутылки пива на стене!

63 бутылки пива на стене
63 бутылки бутылок пива!
Возьми одну, пусти по кругу
62 бутылки пива на стене!

62 бутылки пива на стене
62 бутылки бутылок пива!
Возьми одну, пусти по кругу
61 бутылка пива на стене!

61 бутылка пива на стене
61 бутылка бутылок пива!
Возьми одну, пусти по кругу
60 бутылок пива на стене!

60 бутылок пива на стене
60 бутылок бутылок пива!
Возьми одну, пусти по кругу
59 бутылок пива на стене!

59 бутылок пива на стене
59 бутылок бутылок пива!
Возьми одну, пусти по кругу
58 бутылок пива на стене!

58 бутылок пива на стене
58 бутылок бутылок пива!
Возьми одну, пусти по кругу
57 бутылок пива на стене!

57 бутылок пива на стене
57 бутылок бутылок пива!
Возьми одну, пусти по кругу
56 бутылок пива на стене!

56 бутылок пива на стене
56 бутылок бутылок пива!
Возьми одну, пусти по кругу
55 бутылок пива на стене!

55 бутылок пива на стене
55 бутылок бутылок пива!
Возьми одну, пусти по кругу
54 бутылки пива на стене!

54 бутылки пива на стене
54 бутылки бутылок пива!
Возьми одну, пусти по кругу
53 бутылки пива на стене!

53 бутылки пива на стене
53 бутылки бутылок пива!
Возьми одну, пусти по кругу
52 бутылки пива на стене!

52 бутылки пива на стене
52 бутылки бутылок пива!
Возьми одну, пусти по кругу
51 бутылка пива на стене!

51 бутылка пива на стене
51 бутылка бутылок пива!
Возьми одну, пусти по кругу
50 бутылок пива на стене!

50 бутылок пива на стене
50 бутылок бутылок пива!
Возьми одну, пусти по кругу
49 бутылок пива на стене!

49 бутылок пива на стене
49 бутылок бутылок пива!
Возьми одну, пусти по кругу
48 бутылок пива на стене!

48 бутылок пива на стене
48 бутылок бутылок пива!
Возьми одну, пусти по кругу
47 бутылок пива на стене!

47 бутылок пива на стене
47 бутылок бутылок пива!
Возьми одну, пусти по кругу
46 бутылок пива на стене!

46 бутылок пива на стене
46 бутылок бутылок пива!
Возьми одну, пусти по кругу
45 бутылок пива на стене!

45 бутылок пива на стене
45 бутылок бутылок пива!
Возьми одну, пусти по кругу
44 бутылки пива на стене!

44 бутылки пива на стене
44 бутылки бутылок пива!
Возьми одну, пусти по кругу
43 бутылки пива на стене!

43 бутылки пива на стене
43 бутылки бутылок пива!
Возьми одну, пусти по кругу
42 бутылки пива на стене!

42 бутылки пива на стене
42 бутылки бутылок пива!
Возьми одну, пусти по кругу
41 бутылка пива на стене!

...

5 бутылок пива на стене
5 бутылок бутылок пива!
Возьми одну, пусти по кругу
4 бутылки пива на стене!

4 бутылки пива на стене
4 бутылки бутылок пива!
Возьми одну, пусти по кругу
3 бутылки пива на стене!

3 бутылки пива на стене
3 бутылки бутылок пива!
Возьми одну, пусти по кругу
2 бутылки пива на стене!

2 бутылки пива на стене
2 бутылки бутылок пива!
Возьми одну, пусти по кругу
1 бутылка пива на стене!

1 бутылка пива на стене
1 бутылка бутылок пива!
Возьми одну, пусти по кругу
0 бутылок пива на стене!

Антон Крамолов 05.04.2013 15:40

function timeRemaining(ms) { 
    var year = 365.25, 
        day = 24, 
        hour = 60, 
        minute = hour, 
        second = 1000, 
        years = ms / ( year * day * hour * minute * second ), 
        days = years % 1 * year, hours = days % 1 * day,
        minutes = hours % 1 * hour, 
        seconds = minutes % 1 * minute; 
   return ( years >= 1 
       ? pluralize( Math.floor(years), '', 'год', 'года', 'лет' ) 
       + ' ' : '' ) + ( days >= 1 
       ? pluralize( Math.floor(days), 'д', 'ень', 'ня', 'ней' ) 
       + ' ' : '' ) + ( hours >= 1 
       ? pluralize( Math.floor(hours), 'час', '', 'а', 'ов' ) + ' ' : '' ) 
       + ( minutes >= 1 
       ? pluralize( Math.floor(minutes), 'минут', 'у', 'ы', '' ) + ' ' : '' ) 
       + pluralize( Math.round(seconds), 'секунд', 'у', 'ы', '' ); 
}


<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta charset="utf-8">
        <script src="js/common.js"></script>        
    </head>
    <body style="font: 14px/1.5em Arial">   
        Скачивание начнется через <span id="remaining"></span>
    </body>
    <script>
        var remaining = document.getElementById('remaining'),
            time = 150000, 
            step = 999,
            interval = setInterval(function() {
                if (time < 0) {
                    alert('Время вышло');
                    return clearInterval(interval);
                }
                
                remaining.innerHTML = timeRemaining(time);
                time -= step;
            }, step);              
        remaining.innerHTML = timeRemaining(time);
    </script>
</html>

Антон Крамолов 05.04.2013 15:42



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