这对我来说是一个学习项目,我已经在该站点上进行了一些查询,这使我学到了很多。但是我在使用“切换”例程时遇到了问题,我将不胜感激。此切换例程是一个建议,但我遇到了错误。我已经做了很多研究,但是我仍然不知道如何完成这个过程。我也不明白“ @”在“ date_create(“ @ $ qucls”))中的含义。似乎是否存在并不重要,但这是例行程序的建议。
这些查询会尽我所能生成我想要生成的内容,但是一旦我尝试更新时间字符串,它就会陷入困境。
错误为“ date_format()期望参数1为DateTime,布尔值在...中给出”。据我所知,$ qucls应该是一串数字,不是真/假。在这些表字段中肯定有一个int形式的数字字符串。
只是重复我的其他文章,我无法改变数据库。我需要从中获取信息,以便通过日历程序发出电子邮件提醒。这些表以不寻常的形式和日期/时间字符串的长度盘绕起来,因此该脚本的功能远远超出此处显示的范围。在我的过程中,这就是我要弄清楚的地方,对于七十年代的专家来说还算不错。在找出可以得到正确结果的过程之后,我将进行清理。
这是脚本的适用部分:
date_default_timezone_set('UTC');
$today = date("Ymd");
mysql_select_db($dbname);
$querydel = "SELECT cal_entry_id, cal_type FROM webcal_entry_log WHERE cal_type = 'D'";
$delqu = mysql_query($querydel);
$i = 0;
while ($row = mysql_fetch_array($delqu, MYSQL_NUM)) {
$qudel[$i] = $row[0];
}
$query1 = "SELECT cal_id, cal_name, cal_date, cal_time, cal_type, cal_description FROM webcal_entry WHERE cal_type = 'M' AND cal_date != ' . $today . ' AND cal_id != " . $qudel[$i];
$wequ1 = mysql_query($query1);
while ($row = mysql_fetch_array($wequ1, MYSQL_NUM)) {
$quid1[$i] = $row[0];
$quname[$i] = $row[1];
$qutime[$i] = $row[3];
$qudesc[$i] = $row[5];
$query2 = "SELECT cal_id, cal_type FROM webcal_entry_repeats WHERE cal_id = " . $quid1[$i];
$wer1 = mysql_query($query2);
if ($row = mysql_fetch_array($wer1, MYSQL_NUM)) {
$qutype[$i] = $row[1];
}
$query3 = "SELECT cal_id, cal_last_sent FROM webcal_reminders WHERE cal_id = " . $quid1[$i];
$wer2 = mysql_query($query3);
if ($row = mysql_fetch_array($wer2, MYSQL_NUM)) {
$qucls[$i++] = $row[1];
}
}
for ($j = 0; $j < $i; $j++) {
}
// date calculations - switch routine
$dateObj = date_create("@$qucls");
switch($qutype) {
case "daily":
date_add($dateObj, date_interval_create_from_date_string("1 day"));
break;
case "weekly":
date_add($dateObj, date_interval_create_from_date_string("1 week"));
break;
case "monthly":
date_add($dateObj, date_interval_create_from_date_string("1 month"));
break;
case "yearly":
date_add($dateObj, date_interval_create_from_date_string("1 year"));
break;
}
$qucls = date_format($dateObj, "U");
谢谢!
编辑:$ qucls在查询循环结束后以int()类型输出Unix时间戳数组。一旦启动-$ dateObj = date_create(“ @ $ qucls”),$ dateObj将返回false。我似乎找不到窍门。
最佳答案
在查看代码时,似乎$qucls
是一个数组(基于行$qucls[$i++] = $row[1];
)。 date_create
不接受数组作为第一个参数。@
符号将向date_create
表示您正在传递unix时间戳。
我建议检查if ($dateObj === false)
以查看date_create是否返回正确的值。
看来$qutype
是一个数组。不太确定switch
对传递数组的反应如何...
在尝试调用date_create ...之前,应先print_r($qutype)
和print_r($qucls)
以确保您知道要处理的数据类型。
因此,您是否正在尝试执行以下操作:
foreach($qutype as $key => $type){
$time = $qucls[$key];
$dateObj = date_create("@$time");
switch($type) {
case "daily":
date_add($dateObj, date_interval_create_from_date_string("1 day"));
break;
case "weekly":
date_add($dateObj, date_interval_create_from_date_string("1 week"));
break;
case "monthly":
date_add($dateObj, date_interval_create_from_date_string("1 month"));
break;
case "yearly":
date_add($dateObj, date_interval_create_from_date_string("1 year"));
break;
}
$qucls[$key] = date_format($dateObj, "U");
}
您可以在循环之前和之后执行print_r,以确保所有
$qucls
值都被更新...关于php - 不能添加切换例程而不会出现错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9691516/