билинг, месяца, годы и т.д. perl

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-20 6:15:15

товарищи!

как сделать билиннг, есть задача: сейчас 15:00:45, 05.05.2220

что бы вывести за текущий день нужно 15:00:45 перевести в секунды и просто отнять назад с отношении с текущими секундами... ну и вы высти трафик и т.д.

тоже самое за неделю, и допустим за год...


а как вывести за месяц? как узнать сколько дней в этом месяце? и получаеться что в октябре бывает 29 и 28 дней, а как тут определить сколько дней?? нужно в структурные данные (пример масив) создать календариь на пару годов в перед календарь?

какой алгоритм сделать, можеть модуль есть?

http://search.cpan.org/search?query=calendar&mode=all

а как наш календарь называеться христианский?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/


Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-20 7:11:32

что не получаеться найти...
можно сюда тыкнуть?

у меня есть 05.05.2220 15:00:45 как мне узнать сколько это ушло секунд за прошлый месяц и по запрошлый??

или как узнать сколько дней (секунады надо) в прошлом месяцу в 05.04.2220 ??

или тут элементарно? что-то понять не могу :unknown: :st:
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение zingel » 2008-07-20 7:15:29

у меня есть 05.05.2220 15:00:45 как мне узнать сколько это ушло секунд за прошлый месяц и по запрошлый??
Вашими устами только ТЗ и ставить...

я немогу понять, что в итоге должно получится? Цель* ?
Z301171463546 - можно пожертвовать мне денег

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-20 7:19:02

нужно вынести трафик за 04.2220 месяц

то есть: послать запрос в mysql в диапазоне в секундах...
(сори если плохо вопрос сформулирован)

тут надо

Код: Выделить всё

 $time{'yyyy/mm/dd hh:mm:ss.mmm'}          2003/06/05 13:02:14.171
и буду секунды до 2003/06/05 года потом отсчитать до 2003/07/05 :-o
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-20 7:40:14

правильнее будет наверное так:

узнаю сколько секунд в это дате 2220.04.01 00:00:00

узнаю сколько секунд в это дате 2220.05.01 00:00:00

и потом посылаю запрос в базу в секндах в диапазоне с 2220.04.01 00:00:00 до 2220.05.01 00:00:00, и это будет месяц 2220.04.01

запутался просто, решено :oops: :good: :evil:
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение zg » 2008-07-21 15:03:36

ProFTP писал(а):правильнее будет наверное так:
правильней использовать date и timestamp для хранения полей даты и времени
ProFTP писал(а):и потом посылаю запрос в базу в секндах в диапазоне с 2220.04.01 00:00:00 до 2220.05.01 00:00:00, и это будет месяц 2220.04.01
:no: если используешь date для хранения даты, то можно и так

Код: Выделить всё

SELECT udate, SUM(bytes) FROM `traffic` WHERE udate BETWEEN "2008-01-01" AND "2008-01-30" GROUP BY udate
-- и так тоже можно, если база мелкая
SELECT udate, SUM(bytes) FROM `traffic` WHERE udate LIKE "2008-01%" GROUP BY udate
с точностью до секунд хранить трафик в базе смысла нет, пускай оно в логах лежит, в базе нужна только суммарная инфа.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-21 16:32:55

может быть так:

Код: Выделить всё

]BETWEEN "2008-01-01" AND "2008-02-01" GROUP BY udate
а как я узнаю сколько дней в этом месяце 2008-01-* , чтобы календарь не строить?
получаеться так...

перевести в секунды не проблема, но как правильно делать не знаю, примеров нету, делаю как получиться... :)

UPD: не увидел сразу, тогда так подойдет:

Код: Выделить всё

SELECT udate, SUM(bytes) FROM `traffic` WHERE udate LIKE "2008-01%" GROUP BY udate
это в гугле это находил не однократно
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение hizel » 2008-07-21 16:42:05

секнд

Код: Выделить всё

mysql> select UNIX_TIMESTAMP('2008-06-01 00:00:00')-UNIX_TIMESTAMP('2008-05-01 00:00:00');
+-----------------------------------------------------------------------------+
| UNIX_TIMESTAMP('2008-06-01 00:00:00')-UNIX_TIMESTAMP('2008-05-01 00:00:00') |
+-----------------------------------------------------------------------------+
|                                                                     2678400 |
+-----------------------------------------------------------------------------+
1 row in set (0.00 sec)
часов

Код: Выделить всё

mysql> select (UNIX_TIMESTAMP('2008-06-01 00:00:00')-UNIX_TIMESTAMP('2008-05-01 00:00:00'))/3600;
+------------------------------------------------------------------------------------+
| (UNIX_TIMESTAMP('2008-06-01 00:00:00')-UNIX_TIMESTAMP('2008-05-01 00:00:00'))/3600 |
+------------------------------------------------------------------------------------+
|                                                                           744.0000 |
+------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
дней

Код: Выделить всё

mysql> select (UNIX_TIMESTAMP('2008-06-01 00:00:00')-UNIX_TIMESTAMP('2008-05-01 00:00:00'))/3600/24;
+---------------------------------------------------------------------------------------+
| (UNIX_TIMESTAMP('2008-06-01 00:00:00')-UNIX_TIMESTAMP('2008-05-01 00:00:00'))/3600/24 |
+---------------------------------------------------------------------------------------+
|                                                                           31.00000000 |
+---------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение zg » 2008-07-21 18:09:04

ProFTP писал(а):а как я узнаю сколько дней в этом месяце 2008-01-* , чтобы календарь не строить?
получаеться так...
эххх молодёж :smile: мануалы то для кого писаны?

Код: Выделить всё

SELECT @fday:=DATE_FORMAT(NOW(), "%Y-%m-01") , DATE_FORMAT( DATE_SUB( DATE_ADD( @fday, INTERVAL 1 MONTH ), INTERVAL 1 DAY ), "%Y-%m-%d" );

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение hizel » 2008-07-21 18:12:20

моё элегантнее :smile:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение zg » 2008-07-21 18:22:08

hizel писал(а):моё элегантнее :smile:
у тебя промежуточное значение, у меня конечное :smile: это разные вещи :roll:

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение dikens3 » 2008-07-21 21:05:12

Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение zg » 2008-07-21 21:17:42

:roll: неслабо разогнали тему :smile:
ну можно и так

Код: Выделить всё

SELECT @fday:=DATE_FORMAT(NOW(), '%Y-%m-01') first, @lday:=@fday + INTERVAL 1 MONTH - INTERVAL 1 DAY last
меня, правда, смущает неявное приведение типов, а так вполне компактно получилось :smile:

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-24 13:14:44

кто ставил этот модуль Time::Format в какой пакет он входит, его найти не могу...

Всем спасибо

теперь как вывести все месяца для конкретного пользователя, например от 2005.05.05 до 2008.07.24 (до текущего времени)

что я хочу сделать:
1) вывести все месяца от регистрации пользователя до текущей даты
2) сразу подсчитать за каждый месяц трафик
3) сделать кликабельные ссылки, после клика на месяц чтобы вывелись все дни месяца (как вывести месяца, ну и опрелить дни?)
4) после нажатия на день, чтобы вывелась подробная статистика

я решил хранить в секундах дату (можно срзу конвектировать и в обычную)

не понимаю как вывести все месяца от 2005.05.05 до 2008.07.24 и отпределить сколько в каждой месяце дней


тут нашел вариант:

вывести всю дату из стобиков в память, дальше удулить повторяющиеся строки чтобы остались только месяца (но это займет ОЧЕНЬ МНОГО времени всё выносить) елси бы диапазоны построить... подскжаите как сделать надо?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение hizel » 2008-07-24 13:51:46

обратите внимание на модуль DateTime, там по моему есть все что только может понадобится для оперирования датой\временем
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-24 13:55:03

Код: Выделить всё

Module Version: 0.01   Source  

    * NAME
    * SYNOPSIS
    * DESCRIPTION
    * IMPLEMENTATION
    * SUBCLASSING
    * AUTHOR 

NAME ^

Date::Time - Lightweight normalised datetime data type
SYNOPSIS ^

This is just some suggestions, as nothing is implemented yet. I'm open to critisism. Anyway I don't know if the original name will fit this module with all my plans....

  use Date::Time;

  my $date=Date::Time->new();

  # Set date
  $date->set; # Set to current time
  $date->set(time-60); # Set to 'one minute ago'

  my $greg=Date::Time::Gregorian->new();
  $greg->parse(source=>'Fri Mar  3 01:20:54 CET 2000');
  $greg->parse(source=>'one month ago', format=>'unknown');
  $greg->set(localtime, {timezone=>'local'});
  $greg->set(gmtime);
  
  my $db_time=new Date::Time::MySQLTimeStamp;
  $db_time->set(200003031859);

  # Output date and date elements
  print $db_time->Gregorian->as_string;
  print $db_time->Gregorian->year;
  print $db_time->Gregorian->strftime('%A');

  # The month operator here will return a Date::Gregorian::Month object.
  print $db_time->Gregorian->month->as_string(LANG=>'en');
  print $db_time->Julian->as_string;
  print $db_time->Maya->as_string;

  my $rel_time=$greg->diff($date);
  # Will print something like "3 hours ago" or "5 weeks ago"
  print $rel_time->Gregorian->as_string;

DESCRIPTION ^

See the README as for now. By the way, I want to be neutral to the calender system - that's why the SYNOPSIS above looks like it does. Personally I think Gregorian dates sucks a lot - but I'm living in a Gregorian world and I'm myself mostly thinking about time in Gregorian terms anyway.

The same applies to the decimal number system, btw. I mean, of all numbers, why on earth did they chose 2*5? It's really a stupid, ugly number :) Anyway, I'm always thinking in decimal terms, it's very hard for me to do calculations in other systems.
IMPLEMENTATION ^

I'm intending to write a bit about how I've thought implementing this one here. Some thoughts are already in the README.
SUBCLASSING ^

I will write a bit on how to do subclassing and how to contribute new methods here.
AUTHOR ^

Tobias Brox <tobix@irctos.org>

All kinds of feedback is welcome - and is probably a prerequisite for progress on this module.

это все что в нем есть...
а какой у нас календарь григорианский?
Последний раз редактировалось hizel 2008-07-24 14:01:36, всего редактировалось 1 раз.
Причина: [code][/code]
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение hizel » 2008-07-24 14:00:50

В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-24 14:26:09

Я не вижу чтобы там можно было сделать, это сделать:

у меня есть 2 даты
500000000
400000000

как мне сделать, то что я описал?

или тут все таки как-то по другому надо ?

вот так чтоли:

вывести всю дату из стобиков в память, дальше удулить повторяющиеся строки чтобы остались только месяца (но это займет ОЧЕНЬ МНОГО времени всё выносить) елси бы диапазоны построить... подскжаите как сделать надо?

или тут надо с помощью СУБД oracl?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение hizel » 2008-07-24 15:02:53

в модуле DateTime кроме объекта DateTime в котором хранится собственно дата-время, есть объект DateTime::Duration в котором хранится разница двух дат
эту разницу в потом можете прибавлять\удалять к другим датам, а также брать иё в различных единицах измерения

Код: Выделить всё

#!/usr/bin/perl
#

use DateTime;


my $dt1 = DateTime->new( year => 2003, month => 4, day => 5,hour => 2,time_zone => 'local');
my $dt2 = DateTime->new( year => 2008, month => 5, day => 5,hour => 2,time_zone => 'local');
my $delta = $dt2 - $dt1;

print $delta->delta_months;
извольте вкурить

Код: Выделить всё

perldoc DateTime

Код: Выделить всё

perldoc DateTime::Duration
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-24 15:57:09

вы наверное имеете ввиду подсчитать количесво месяцев а потом у цикле прибавлять таким образом

Код: Выделить всё

  my $dt = DateTime->new( year => 2003, month => 4, day => 5,
                          hour => 1, minute => 58,
                          time_zone => "America/Chicago",
                        );

  $dt->add( days => 1, minutes => 3 );
  # 2003-04-06 02:01:00

  $dt->add( minutes => 3 )->( days => 1 );
  # 2003-04-06 03:01:00
буду пробовать - это должно сработать...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение zg » 2008-07-25 9:41:19

ProFTP писал(а):что я хочу сделать:
1) вывести все месяца от регистрации пользователя до текущей даты
2) сразу подсчитать за каждый месяц трафик
3) сделать кликабельные ссылки, после клика на месяц чтобы вывелись все дни месяца (как вывести месяца, ну и опрелить дни?)
4) после нажатия на день, чтобы вывелась подробная статистика
это всё делается через адын запрос и два ассоциативных массива :smile: при этом дата может находится в любом формате, токо это неверный путь :) поскольку решается это всё через две таблицы и один файл-лог.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-25 9:49:41

я тут не могу найти про дату http://www.mysql.ru/docs/man/ есл ивы это имеете ввиду

если по вашему варианту, zg , то что первое надо делать? если дата стоит пусть в формате обычном "2005.05.05", то как вывести дату чтобы она не повторялась? если всю дату буду выносить то mysql повиснит... каким образом построить хэш? если не сложно, скажите
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение hizel » 2008-07-25 11:14:57

если вы завязываетесь на мускул то ради бога ;)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: билинг, месяца, годы и т.д. perl

Непрочитанное сообщение ProFTP » 2008-07-25 21:47:21

hizel писал(а):если вы завязываетесь на мускул то ради бога ;)
ваш вариант больше нравиться

все равно лижбы работало, только я регулярку не понял в СУБД, чтобы вывести первые даты, и чтобы они не повторялись...
тесты скорости скоро покажу
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение