Счетчик дней

kabanoid

Client
Регистрация
28.05.2017
Сообщения
30
Благодарностей
0
Баллы
8
Здравствуйте, уважаемые форумчане.
Разрабатываю сейчас один спам проект. Возник вопрос следующего плана: хочу ввести ограничение на количество сообщений каждому отдельному получателю. ограничение по интервалу времени, допустим по 1 сообщению каждые 20 дней. Ну и возникла проблема по подсчитыванию количества дней, прошедших с момента отсылки прошлого письма. Сами даты сохраняю в таблице в виде номер_анкеты:текущая дата. Но вот как высчитать, сколько дней прошло, непонятно. в каждом месяце разное количество дней, и как их посчитать без навыков программирования, я не знаю. Может кто-нибудь реализовывал что то подобное?
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 408
Благодарностей
1 474
Баллы
113
{-TimeNow.Date-} получить время или
Код:
DateTime TimeBegin = DateTime.Now;
DateTime TimeEnd = DateTime.Now;
TimeSpan diff = TimeEnd - TimeBegin;
Считает разницу между первой и второй датой в секундах
 

kabanoid

Client
Регистрация
28.05.2017
Сообщения
30
Благодарностей
0
Баллы
8
{-TimeNow.Date-} получить время или
Код:
DateTime TimeBegin = DateTime.Now;
DateTime TimeEnd = DateTime.Now;
TimeSpan diff = TimeEnd - TimeBegin;
Считает разницу между первой и второй датой в секундах
Это код С# ?
 

kabanoid

Client
Регистрация
28.05.2017
Сообщения
30
Благодарностей
0
Баллы
8
не понимаю я , как это организовано.
вот есть у меня допустим переменная timebegin в формате 07/13/2017 12:40:41
и вторая переменная currenttime c текущим временем 07/13/2017 12:46:41
и как вычесть одно из другого?
точность можно хоть в секундах, хоть в часах, хоть в днях ,особо без разницы
 

serg32

Client
Регистрация
27.02.2015
Сообщения
545
Благодарностей
15
Баллы
18
{-TimeNow.Date-} получить время или
Код:
DateTime TimeBegin = DateTime.Now;
DateTime TimeEnd = DateTime.Now;
TimeSpan diff = TimeEnd - TimeBegin;
Считает разницу между первой и второй датой в секундах
А не подскажите как использовать данный код? Просто если его так и оставить, то в переменную кладется просто результат "ОК", а если установить "return" то он ругается, что объекта нет

Было бы здорово если вы предоставите ссылочку на какой-нибудь материал обучающий на эту тему, как работать в С#
 

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
А не подскажите как использовать данный код? Просто если его так и оставить, то в переменную кладется просто результат "ОК", а если установить "return" то он ругается, что объекта нет

Было бы здорово если вы предоставите ссылочку на какой-нибудь материал обучающий на эту тему, как работать в С#
return diff;
 

serg32

Client
Регистрация
27.02.2015
Сообщения
545
Благодарностей
15
Баллы
18
Да, так сработало. Но он так возвращает сразу просто нули, так как код выполняется мгновенно и разницы между датами нет. Как будет выглядеть код если мне необходимо в начале проекта определить переменную например "Today" что бы потом эту переменную положить в значение - TimeBegin а уже затем произвести операцию вычитания. Как подставить свою переменную начала проекта?
 

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
DateTime TimeBegin = DateTime.Now;
return TimeBegin;
это вначале экшен.
И второй в конце
  1. DateTime TimeEnd = DateTime.Now
  2. TimeSpan diff = TimeEnd - TimeBegin;
  3. return diff;
 

kabanoid

Client
Регистрация
28.05.2017
Сообщения
30
Благодарностей
0
Баллы
8
Все равно непонятно, как информацию из переменной со старой датой воткнуть в этот код, чтобы посчитать разницу между текущим временем и прошедшей датой. дата записана в переменную в формате 07/13/2017 12:40:41
И еще, return diff возвращает информацию в виде 00:00:00 , а мне требуется в виде простого числа, будь то количество секунд, минут,часов, не суть важно.
 

kabanoid

Client
Регистрация
28.05.2017
Сообщения
30
Благодарностей
0
Баллы
8
Порылся на форуме, нашел решение
// Конвертируем время
System.Globalization.CultureInfo culture =System.Globalization.CultureInfo.CreateSpecificCulture("ru-RU");
DateTime date = DateTime.Parse(project.Variables["Timebegin"].Value, culture);
var date2 = DateTime.Now; // Текущее время
TimeSpan span = date2 - date;
double seconds = span.TotalSeconds;
return seconds;

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

SteveJobs

Client
Регистрация
03.11.2016
Сообщения
283
Благодарностей
30
Баллы
28
регексом до запятой .*(?=,)
 

kabanoid

Client
Регистрация
28.05.2017
Сообщения
30
Благодарностей
0
Баллы
8

orka13

Client
Регистрация
07.05.2015
Сообщения
2 179
Благодарностей
2 187
Баллы
113
Вы достали :-), вот готовый кубик на C#:
C#:
string Time_old = project.Variables["Time_old"].Value; // в Зенке в переменой "Time_old" должна быть наша старая дата "месяц/день/год ..." ("06/15/2017 12:40:41" )
DateTime Time_old_classic = DateTime.ParseExact(Time_old, "MM/dd/yyyy HH:mm:ss", null); // умно парсим дату из нашей переменной формата "месяц/день/год", а то изначально програма ее понимает как набор символов (string) а не как дату.
TimeSpan Time_diff = DateTime.Now - Time_old_classic; // считаем разницу от текущей даты
return Math.Floor(Time_diff.TotalDays); // возвращаем разницу в формате "дни", или замените TotalDays на TotalSeconds (секунды)
UPD: и почитайте азы синтаксиса С# в ZennoPoster, мне помогло - http://zennolab.com/discussion/threads/poznakomsja-ehto-c-prosto-bystro-udobno-podborka-snippetov-vnutri.27710/
 
Последнее редактирование:

spy107

Client
Регистрация
19.08.2012
Сообщения
195
Благодарностей
15
Баллы
18
Вы достали :-), вот готовый кубик на C#:
C#:
string Time_old = project.Variables["Time_old"].Value; // в Зенке в переменой "Time_old" должна быть наша старая дата "месяц/день/год ..." ("06/15/2017 12:40:41" )
DateTime Time_old_classic = DateTime.ParseExact(Time_old, "MM/dd/yyyy HH:mm:ss", null); // умно парсим дату из нашей переменной формата "месяц/день/год", а то изначально програма ее понимает как набор символов (string) а не как дату.
TimeSpan Time_diff = DateTime.Now - Time_old_classic; // считаем разницу от текущей даты
return Math.Floor(Time_diff.TotalDays); // возвращаем разницу в формате "дни", или замените TotalDays на TotalSeconds (секунды)
UPD: и почитайте азы синтаксиса С# в ZennoPoster, мне помогло - http://zennolab.com/discussion/threads/poznakomsja-ehto-c-prosto-bystro-udobno-podborka-snippetov-vnutri.27710/
У меня почему-то этот код не работает. :( Ошибку выводит: Выполнение действия CSharp OwnCode Строка не распознана как действительное значение DateTime. , в чём может быть проблема?
 
Последнее редактирование:

orka13

Client
Регистрация
07.05.2015
Сообщения
2 179
Благодарностей
2 187
Баллы
113
А засветите в тему значение переменной Time_old. Там скорее всего не в виде "MM/dd/yyyy HH:mm:ss" данные. Переправьте под свой формат вторую строку. Просто в ТСв таком нестандартном формате шло, вот под него и сделано.
 

ol1ver

Client
Регистрация
29.08.2013
Сообщения
332
Благодарностей
82
Баллы
28
я хз как на с#, оперировал бы с time(), и прибавлял дни/часики в секундах, а лучше серверная часть на том же php. И не в коем случае не оперировал бы временем клиента, ну и токены конечно же, а то софт отвязывал заглушкой на localhost.
 

spy107

Client
Регистрация
19.08.2012
Сообщения
195
Благодарностей
15
Баллы
18
А засветите в тему значение переменной Time_old.
06/28/2017 05:39:38
06/29/2017 17:56:28
07/12/2017 19:25:22
07/21/2017 14:01:58
07/28/2017 16:18:29
да вроде бы такой же формат. ну это естественно не весь список в переменной а по одной строчке берется каждый раз.
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 179
Благодарностей
2 187
Баллы
113
хз, у меня все работает. Зенка последняя 5.11.5.0. Вот шаб - http://orka13.ru/fls/Zenno/Счетчик_дней.zip
Может какие-то левые символы все же затерялись, или не то в переменную ложится.
 
  • Спасибо
Реакции: spy107

spy107

Client
Регистрация
19.08.2012
Сообщения
195
Благодарностей
15
Баллы
18
хз, у меня все работает. Зенка последняя 5.11.5.0. Вот шаб - http://orka13.ru/fls/Zenno/Счетчик_дней.zip
Может какие-то левые символы все же затерялись, или не то в переменную ложится.
Возможно это из-за версии зенки походу, потому что у меня 5.9.0.1 версия. И твой шаблон у меня тоже не отрабатывает, та же ошибка вылазиет. :(

Видимо нужно искать какой-то обходной путь, потому что вообще другие c# кубики работают нормально, именно тут проблема, видимо синтаксис нужно использовать другой в моей версии или что-то типа того...

К сожалению возможности обновить версию нету...:(

Я думаю что проблема вся во взятии текущего времени с помощью: DateTime.Now
Можно ли его как-то брать иначе?

Или вообще на javascript может кто-то подскажет как сделать?
 
Последнее редактирование:

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)