我正在构建一个要求允许用户存储计划的CMS。该界面类似于MS Outlook,因此重复计划几乎需要模仿该UI可以支持的内容。
当保存计划时,我们需要以某种方式在事件发生时发出警报。现在,计划是每分钟运行一次cron作业,以检查是否在那一刻安排了一个事件。
由于我们的用户来自世界各地,我们需要此调度系统为时区和DST感知。
此外,将此时间表转换为人类可读文本的能力(例如“2010年1月1日上午9点至2010年2月1日的每一天”)对我们的用户来说都是不错的。
有没有人有任何想法如何实现这个?我正在使用PHP / MySQL。
答案 0 :(得分:1)
查看iCalendar规范,了解可以指定的内容......
答案 1 :(得分:1)
您的问题看起来更像是职位发布的帖子,要求某人为您编写应用程序。
这真的不是那么复杂,你要做的是什么。只需设置一个MySQL表来存储appts,包括名称,描述,开始时间戳,结束时间戳和“重复”布尔值。使用Ajax查询数据库,您希望在任何时间间隔查看是否有任何即将到来的约会。如果为true,则通知用户。
对于时间格式,您可以执行以下操作:
function format_date($timestamp1, $timestamp2,$repeating) {
$str = "";
if($repeating) {
$str .= "Every Day";
}
$str .= "From ".date("g:i a",$timestamp1)." To ".date("g:i a",$timestamp2);
return ($str);
}
以下是您可以查看的一些查询以及一些表创建SQL:
CREATE TABLE `appointments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`description` text,
`recurring` int(11) DEFAULT NULL,
`recurrence_type` varchar(50) DEFAULT NULL,
`starting_timestamp` int(14) DEFAULT NULL,
`ending_timestamp` int(14) DEFAULT NULL,
`end_recurring_timestamp` int(14) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1
mysql_query("SELECT * FROM appointments
WHERE recurring=0
AND starting_timestamp <= ". time() + 86400 ."
AND starting_timestamp > ". time() ."
ORDER BY starting_timestamp DESC");
mysql_query("SELECT * FROM appointments
WHERE recurring=1
AND recurrence_type='DAILY'
AND starting_timestamp <= ". time() + 86400 ."
AND end_recurring_timestamp > ". time() ."
ORDER BY starting_timestamp DESC");
每周和每月的重复将更复杂,并且可能需要在SQL查询之外进行操作。这可能意味着更高的开销。
对于此示例,我将日期存储为时间戳。但是,将它们存储为字符串并使用strtotime()之类的东西可能更合理。虽然,我不知道这个功能有多可靠。
你可以得到这个想法。至于时区支持,请查看http://www.ultramegatech.com/blog/2009/04/working-with-time-zones-in-php/和http://www.php.net/manual/en/class.datetimezone.php