package utils
{
public class TimeAlarm
{
static private var _instance:TimeAlarm;//利用单例形式
private var _timeSourceFunc:Function;
/**
*闹铃办理器
*
*/
public function TimeAlarm()
{
if(_instance!=null)
throw "TimeAlarm is single instance class."
}
static public function get instance():TimeAlarm
{
if(_instance==null)
{
_instance = new TimeAlarm();
}
return _instance;
}
/**
*正在帧轮回中挪用
* @param time
*
*/
public function alarmTick(time:Number=NaN):void
{
var date:Date;
var day:int;
if(isNaN(time)==true)
{
date = new Date();
}else{
date = new Date(time);
}
var monthly_key:String = "";
var weekly_key:String = "";
var daily_key:String = "";
//每个月 键值
if(date.month<9)
{
monthly_key += "0";
}
monthly_key += String(date.month+1);
if(date.date<10)
{
monthly_key += "0";
}
monthly_key += String(date.date);
//每周 键值
if(date.day==0)
{
monthly_key = monthly_key + "07";
weekly_key = weekly_key + "07";
day = 7;
}else{
monthly_key = monthly_key + "0" + String(date.day);
weekly_key = weekly_key + "0" + String(date.day);
day = date.day;
}
//每时 键值
if(date.hours<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key += String(date.hours);
weekly_key += String(date.hours);
daily_key += String(date.hours);
if(date.minutes<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key +=String(date.minutes);
weekly_key +=String(date.minutes);
daily_key +=String(date.minutes);
if(date.seconds<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key +=String(date.seconds);
weekly_key +=String(date.seconds);
daily_key +=String(date.seconds);
if(_alarms!=null)
{
var type_alarms:Array;
var final_key:String;
for (var type:String in _alarms)
{
type_alarms = _alarms[type];
switch(int(type))
{
case ALARM_WEEKLY:
{
final_key = weekly_key;
break;
}
case ALARM_DAiLY:
{
final_key = daily_key;
break;
}
}
var alarm:Object;
var alarms:Array;
//正面提示
for (var k:String in type_alarms)
{
alarms = type_alarms[k];
if(k==final_key)
{
for each(alarm in alarms)
{
if(alarm.alarm is Function)
{
alarm.alarm(alarm);
alarm.alarmed = true;
}
}
}else{
for each(alarm in alarms)
{
//超出正面,可是借正在范畴内
if(alarm.range!=null && alarm.alarmed==false)
{
//先只算周提示的
if((alarm.w==null || alarm.w==day) && alarm.h==date.hours)//
{
var end_min:int = int(alarm.min)+int(alarm.range);
var start_min:int = int(alarm.min);
var start_s:int = int(alarm.s);
var in_range:Boolean = false;
if(end_min>date.minutes)//完毕时间比当前时间早
{
if(start_min==date.minutes)//假如恰好是开端妨魁
{
if(start_s<date.seconds)//吭哟是否是当前时间过了正面
{
in_range = true;
}
}else if(start_min<date.minutes)//假如过了开端妨魁
{
in_range = true;
}
}else if(end_min==date.minutes)//假如当前时间遇上告终束时间
{
if(start_s>date.seconds)//秒数借正在范畴内
{
in_range = true;
}
}
if(in_range==true)
{
alarm.alarmed = true;
alarm.alarm(alarm);
}
}
}
}
}
}
}
}
}
private const KEYS:Array = ["m", "d", "w", "h", "min", "s"];
//类型战KEYS里的属性索引是洞喀的
private const ALARM_WEEKLY:int = 2;//每周
private const ALARM_DAiLY:int = 3;//逐日
private var _alarms:Array;
/**
* @param alarm {m:1~12, d:1~31, w:1~7, h:0~23, min:0~60, s:0~60, range:xx, alarm:call back function } 各自意义 月 日 周(1~7) 时 分 秒
* range:{min:0<=min<60; s:0<=s<60} 从肇端时间开端,指按时间范畴内皆有用,单元分;alarm:回调函数
*
*/
public function addAlarm(alarm:Object):void
{
var alarm_type:int = -1;
//那里的判断要从年夜到小,好比扩展了每个月类型的便要先判兑,逆序胰ノ是 每一年>每个月>每周>天天
if(alarm.hasOwnProperty("w")==true && alarm.w>0)
{
alarm_type = ALARM_WEEKLY;
}else if(alarm.hasOwnProperty("h")==true)
{
alarm_type = ALARM_DAiLY;
}
if(alarm_type>=0)
{
formatAlarm(alarm, alarm_type);
}
}
private function formatAlarm(alarm:Object, alarmType:int):void
{
var finale_key:String = "";
for(var i:int = alarmType; i < KEYS.length; ++i)
{
var key:String = KEYS[i];
if(alarm[key]!=null)
{
if(alarm[key]<10)
{
finale_key += "0";
}
finale_key += String(alarm[key]);
}else{
finale_key += "00";
}
}
if(_alarms==null)
{
_alarms = new Array();
}
if(_alarms[alarmType]==null)
{
_alarms[alarmType] = new Array();
}
if(_alarms[alarmType][finale_key]==null)
{
_alarms[alarmType][finale_key] = new Array();
}
alarm.alarmed = false;
_alarms[alarmType][finale_key].push(alarm);
}
}
}
{
public class TimeAlarm
{
static private var _instance:TimeAlarm;//利用单例形式
private var _timeSourceFunc:Function;
/**
*闹铃办理器
*
*/
public function TimeAlarm()
{
if(_instance!=null)
throw "TimeAlarm is single instance class."
}
static public function get instance():TimeAlarm
{
if(_instance==null)
{
_instance = new TimeAlarm();
}
return _instance;
}
/**
*正在帧轮回中挪用
* @param time
*
*/
public function alarmTick(time:Number=NaN):void
{
var date:Date;
var day:int;
if(isNaN(time)==true)
{
date = new Date();
}else{
date = new Date(time);
}
var monthly_key:String = "";
var weekly_key:String = "";
var daily_key:String = "";
//每个月 键值
if(date.month<9)
{
monthly_key += "0";
}
monthly_key += String(date.month+1);
if(date.date<10)
{
monthly_key += "0";
}
monthly_key += String(date.date);
//每周 键值
if(date.day==0)
{
monthly_key = monthly_key + "07";
weekly_key = weekly_key + "07";
day = 7;
}else{
monthly_key = monthly_key + "0" + String(date.day);
weekly_key = weekly_key + "0" + String(date.day);
day = date.day;
}
//每时 键值
if(date.hours<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key += String(date.hours);
weekly_key += String(date.hours);
daily_key += String(date.hours);
if(date.minutes<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key +=String(date.minutes);
weekly_key +=String(date.minutes);
daily_key +=String(date.minutes);
if(date.seconds<10)
{
monthly_key += "0";
weekly_key += "0";
daily_key += "0";
}
monthly_key +=String(date.seconds);
weekly_key +=String(date.seconds);
daily_key +=String(date.seconds);
if(_alarms!=null)
{
var type_alarms:Array;
var final_key:String;
for (var type:String in _alarms)
{
type_alarms = _alarms[type];
switch(int(type))
{
case ALARM_WEEKLY:
{
final_key = weekly_key;
break;
}
case ALARM_DAiLY:
{
final_key = daily_key;
break;
}
}
var alarm:Object;
var alarms:Array;
//正面提示
for (var k:String in type_alarms)
{
alarms = type_alarms[k];
if(k==final_key)
{
for each(alarm in alarms)
{
if(alarm.alarm is Function)
{
alarm.alarm(alarm);
alarm.alarmed = true;
}
}
}else{
for each(alarm in alarms)
{
//超出正面,可是借正在范畴内
if(alarm.range!=null && alarm.alarmed==false)
{
//先只算周提示的
if((alarm.w==null || alarm.w==day) && alarm.h==date.hours)//
{
var end_min:int = int(alarm.min)+int(alarm.range);
var start_min:int = int(alarm.min);
var start_s:int = int(alarm.s);
var in_range:Boolean = false;
if(end_min>date.minutes)//完毕时间比当前时间早
{
if(start_min==date.minutes)//假如恰好是开端妨魁
{
if(start_s<date.seconds)//吭哟是否是当前时间过了正面
{
in_range = true;
}
}else if(start_min<date.minutes)//假如过了开端妨魁
{
in_range = true;
}
}else if(end_min==date.minutes)//假如当前时间遇上告终束时间
{
if(start_s>date.seconds)//秒数借正在范畴内
{
in_range = true;
}
}
if(in_range==true)
{
alarm.alarmed = true;
alarm.alarm(alarm);
}
}
}
}
}
}
}
}
}
private const KEYS:Array = ["m", "d", "w", "h", "min", "s"];
//类型战KEYS里的属性索引是洞喀的
private const ALARM_WEEKLY:int = 2;//每周
private const ALARM_DAiLY:int = 3;//逐日
private var _alarms:Array;
/**
* @param alarm {m:1~12, d:1~31, w:1~7, h:0~23, min:0~60, s:0~60, range:xx, alarm:call back function } 各自意义 月 日 周(1~7) 时 分 秒
* range:{min:0<=min<60; s:0<=s<60} 从肇端时间开端,指按时间范畴内皆有用,单元分;alarm:回调函数
*
*/
public function addAlarm(alarm:Object):void
{
var alarm_type:int = -1;
//那里的判断要从年夜到小,好比扩展了每个月类型的便要先判兑,逆序胰ノ是 每一年>每个月>每周>天天
if(alarm.hasOwnProperty("w")==true && alarm.w>0)
{
alarm_type = ALARM_WEEKLY;
}else if(alarm.hasOwnProperty("h")==true)
{
alarm_type = ALARM_DAiLY;
}
if(alarm_type>=0)
{
formatAlarm(alarm, alarm_type);
}
}
private function formatAlarm(alarm:Object, alarmType:int):void
{
var finale_key:String = "";
for(var i:int = alarmType; i < KEYS.length; ++i)
{
var key:String = KEYS[i];
if(alarm[key]!=null)
{
if(alarm[key]<10)
{
finale_key += "0";
}
finale_key += String(alarm[key]);
}else{
finale_key += "00";
}
}
if(_alarms==null)
{
_alarms = new Array();
}
if(_alarms[alarmType]==null)
{
_alarms[alarmType] = new Array();
}
if(_alarms[alarmType][finale_key]==null)
{
_alarms[alarmType][finale_key] = new Array();
}
alarm.alarmed = false;
_alarms[alarmType][finale_key].push(alarm);
}
}
}