0

我有一个 mysql 数据库,我试图在其中插入一年的连续日期(从 2012 年 7 月 1 日开始),并且只希望使用 php 插入工作日日期。以下是我到目前为止的代码,但收到一条错误消息:第 11 行的“values (date("Ymd", $i)”代码处出现了意外的 'Y' (T_STRING)。非常感谢任何帮助。

$startdate = mktime(0,0,0,7,1,2013); 
$enddate = strtotime("+1 years", $startdate); 

// now we have a lower number and an upper  
// number, we can loop to give dates 
echo $startdate;
echo $enddate;

for($i=$startdate; $i<=$enddate; $i=strtotime("+1day",$i)) {
    if ($i >=2 && $i<=6){
        $insert_query = "insert into schedstats(schedDate, schedRep, reqPOD) values (date("Y-m-d", $i), 2, "All Day")";
        mysql_query($insert_query) or die ("Error in query: $insert_query. ".mysql_error());
    }
}
4

3 回答 3

0
mysql> SELECT ADDTIME('2007-12-31 23:59:59.999999', '1 1:1:1.000002');
    -> '2008-01-02 01:01:01.000001'

mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998');
    -> '03:00:01.999997'

来源:dev.mysql.com:function_addtime

于 2013-06-22T20:46:36.807 回答
0

您要么需要在其他引号样式中使用相反的引号样式,要么在字符串中转义引号,例如\"or \'。您还应该在 MySQL 中使用 MySQL 日期和时间函数。$insert_query = "插入 schedstats(schedDate, schedRep, reqPOD) 值 (date("Ymd", $i), 2, "All Day")"; 应该是这样的:

$insert_query = "INSERT schedstats(schedDate, schedRep, reqPOD) VALUES (DATE_FORMAT(FROM_UNIXTIME($i), '%Y-%m-%d'), 2, 'All Day')";

有关详细信息,请参阅http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html 。

旁注:
变量,like$i将在双引号内进行评估。一维数值数组也可以用双引号计算,例如"What $ary[1] more info here";. 如果要将一维关联数组放在双引号内,可以像"What {$ary['key']} more info here";. 如果您将另一个字符串放入字符串中,请想象您放入引号的字符串正在被删除。因此,如果引号本身需要在您要放入另一个字符串的字符串中,请将它们放回原处。如果您无法通过任何双引号方法获得结果,请使用连接,例如'What '.$ary[0]['key'].' more info here';. 由于 PHP 会尝试评估双引号内的所有内容,因此使用单引号在技术上可能更快。我一直使用双引号,但它工作正常。

于 2013-06-22T00:29:24.087 回答
0

您没有插入任何元素的原因是您正在检查 var$i是否在 2 和 6 之间(星期一和星期五?)。关键是它$i被初始化为一个unixtime时间戳,这是一个非常高的值。

首先我做了,是重命名$i$tstamp,所以更清楚它到底是什么。然后该函数isWeekDay()检查是否$tstamp是工作日。最后,作为schedDateDATE 字段,您需要将$tstampunixtimestamp 转换为 MySQL 日期。

注意:根据 PHP 文档,工作日范围在 1 到 5 之间。

<?

$startdate = mktime(0,0,0,7,1,2013);
$enddate = strtotime("+1 years", $startdate);

// now we have a lower number and an upper  
// number, we can loop to give dates 
echo "startdate: $startdate\n";
echo "enddate: $enddate\n";

for ($tstamp = $startdate; $tstamp <= $enddate; 
        $tstamp = strtotime("+1day",$tstamp)) {
    if (isWeekDay($tstamp)) {
        $insert_query = "insert into schedstats(schedDate, schedRep, reqPOD) 
            values (from_unixtime($tstamp), 2, 'All Day')";
        mysql_query($insert_query) 
            or die ("Error in query: $insert_query. ".mysql_error());
    }
}

function isWeekDay($tstamp) {
    $weekday = date("w", $tstamp);
    return $weekday > 0 && $weekday < 6;
}

?>
于 2013-06-22T22:14:55.517 回答