//для шаблона Напомни
if(!$params['txt']) return;
$cmd = $params['txt'];
//https://regexr.com/
//$cmd = 'в 6:30 дня в следующий вторник проверить кое-что';
//$cmd = 'проверить кое-что через четверть часа';
//$cmd = 'вечером в выходные проверить кое-что';
//$cmd = 'проверить кое-что в полдень послезавтра';
//$cmd = 'через два с половиной часа сделать кое-что';
//$cmd = 'сделать кое-что через два с половиной часа';
debmes('setMemo - '.$cmd);
$cmd = mb_strtolower($cmd);
$newtime = 0;
$newdate = 0;
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd); //уберём лишние пробелы
$chislo = array('один'=> '1','одну'=> '1','одни'=> '1','полтора' => '1.5','полторы' =>'1.5','два'=> '2','две'=> '2','двое'=> '2','три'=> '3','трое'=> '3','четыре'=> '4','четверо'=> '4','пять'=> '5','шесть'=> '6','семь'=> '7','восемь'=> '8','девять'=> '9');
$tim1 = array('минуту'=>'m','минуты'=>'m','минут'=>'m','часов'=>'H','часа'=>'H','час'=>'H','день'=>'D','дня'=>'D','дней'=>'D','сутки'=>'D','суток'=>'D');
$MonthNames = array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря");
//через?
if(preg_match('/через /isu', $cmd1)){
if(preg_match('/через полчаса/isu', $cmd1, $m)){
$cmd1 = str_replace('через полчаса','через 30 минут',$cmd1); //через полчаса -> через 30 минут
}
if(preg_match('/через четверть часа/isu', $cmd1, $m)){
$cmd1 = str_replace('через четверть часа','через 15 минут',$cmd1); //через полчаса -> через 30 минут
}
if(preg_match('/через (час|минуту|день|сутки)/isu', $cmd1, $m)){
$cmd1 = str_replace('через','через 1',$cmd1); //через час -> через 1 час
}
$half = 0;
if(preg_match('/(часов|часа|час) с половиной /isu', $cmd1, $m)){
$half = 0.5;
$cmd1 = str_replace('с половиной','',$cmd1);
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
}
if(preg_match('/с половиной (часов|часа|час)/isu',$cmd1,$m)){
$half = 0.5;
$cmd1 = str_replace('с половиной','',$cmd1);
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
}
//echo('<br>');
//echo('half-'.$half);
if(preg_match('/через (.+) (часов|часа|час|минуты|минуту|минут|день|дня|дней|сутки|суток)/isu', $cmd1, $m)){
//print_r($m);
$cmd1 = str_replace($m[0],'',$cmd1);
foreach($chislo as $key => $value) {$m[1] = str_replace($key,$value,$m[1]);} //'один'=> '1'
foreach($tim1 as $key => $value) {$m[2] = str_replace($key,$value,$m[2]);} //'минуту'=>'m','минуты'=>'m'...
//вычислим новое время
$delta = (float)$m[1];
if($delta<=0){
echo('wrong interval '.$delta);
say('Непонятно! Попробуйте задать время по другому',2);
return;
}
switch ($m[2]){
case 'm':
$newtime = time() + $delta*60;//minutes
break;
case 'H':
$newtime = time() + $delta*60*60 + $half*60*60;//hours
break;
case 'D':
$newtime = time() + $delta*60*60*24;//days ToDo - add to calendar?
break;
default:
say('Непонятно! Попробуйте переформулировать задание',2);
return;
}
AddScheduledJob($cmd1,"playSound('r2d2',1); say('Вы просили напомнить ".$cmd1."',5);",$newtime, 60);
$nmes=date( "n" , $newtime)-1;
$nmonth=$MonthNames[$nmes];
//echo("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth);
say("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth,2);
return;
}
}
////////////////////////////////////////////////////////////////////
$newtime = time();
if(preg_match('/(сегодня|завтра|послезавтра)/isu', $cmd1, $m)){
switch($m[0]){
case 'завтра':
$newtime = strtotime("+1 day");
break;
case 'послезавтра':
$newtime = strtotime("+2 days");
break;
case 'сегодня':
$newtime = date();
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
if(preg_match('/в (следующий|следующую|следующее|следующие) /isu', $cmd1, $m)){
$cmd1 = str_replace($m[1],'',$cmd1);
}
if(preg_match('/в (этот|эту|это|эти) /isu', $cmd1, $m)){
$cmd1 = str_replace($m[1],'',$cmd1);
}
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
if(preg_match('/(в|во) (понедельник|вторник|среду|четверг|пятницу|субботу|воскресенье|выходные) /isu', $cmd1, $m)){
switch($m[2]){
case 'понедельник':
$newtime = strtotime("next Monday");
break;
case 'вторник':
$newtime = strtotime("next Tuesday");
break;
case 'среду':
$newtime = strtotime("next Wednesday");
break;
case 'четверг':
$newtime = strtotime("next Thursday");
break;
case 'пятницу':
$newtime = strtotime("next Friday");
break;
case 'субботу':
$newtime = strtotime("next Saturday");
break;
case 'воскресенье':
$newtime = strtotime("next Sunday");
break;
case 'выходные':
$newtime = strtotime("next Saturday");
break;
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
//проверим время
if(preg_match('/в (полдень|полночь)/isu', $cmd1)){
$cmd1 = str_replace('в полдень','в 12:00',$cmd1);
$cmd1 = str_replace('в полночь','в 23:59',$cmd1);
}
$cmd1 = preg_replace('/\s\s+/', ' ', $cmd1); //уберём лишние пробелы
if(preg_match('/(утром|вечером|днём|днем|ночью)/isu', $cmd1, $m)){ //напомни утром
$cmd2 = $m[0]; //для удаления
if(!preg_match('/в (\d+):(\d+)/isu', $cmd1)){ //
switch($cmd2){
case 'утром':
$newtimes = 'в 8:00';
break;
case 'вечером':
$newtimes = 'в 20:00';
break;
case 'днём':
$newtimes = 'в 13:00';
break;
case 'днем':
$newtimes = 'в 13:00';
break;
case 'ночью':
$newtimes = 'в 23:00';
break;
}
}
$cmd1 = str_replace($cmd2,$newtimes,$cmd1);
}
if(preg_match('/в (\d+):(\d+)/isu', $cmd1, $m)){
$hour = $m[1];
$minute = $m[2];
$cmd2 = $m[0]; //для удаления
if(preg_match('/в (\d+):(\d+) (ночи|дня|утра|вечера)/isu', $cmd1, $m)){
switch ($m[3]){
case 'дня':
if((int)$hour<12){$hour = $hour +12;} // в 3 часа дня = в 15:00
break;
case 'вечера':
if((int)$hour<12){$hour = $hour +12;} // в 6 часов вечера = в 18:00
break;
}
$cmd1 = str_replace($m[0],'',$cmd1);
}
$cmd1 = str_replace($cmd2,'',$cmd1);
$newtime = mktime( (int)$hour,(int)$minute,0,date("n",$newtime),date("j",$newtime), date("Y",$newtime));
if($newtime<time()){$newtime = strtotime(date('Y-m-d H:i',$newtime)."+ 1 days");}
}
AddScheduledJob($cmd1,"playSound('r2d2',1);sleep(2); say('Вы просили напомнить - ".$cmd1."',5);",$newtime, 60);
$nmes = date( "n" , $newtime)-1;
$nmonth = $MonthNames[$nmes];
say("Задание напомнить ".$cmd1." установлено на ".date('G:i',$newtime)." ".date('d',$newtime)." ".$nmonth,2);
//return;