1

私は、PHPとMySQL(平日のみ)を同時に使用して、蛾の労働時間を挿入しようとしています。

差出人:01.02.2013 08:30
宛先:28.02.2013 17:30

次に、2013年2月28日までの営業日ごとに挿入する必要があります。

01.02.2013 08:30 -01.02.2013 17:30
02.02.2013 08:30 -02.02.2013 17:30
03.02.2013 08:30 -03.02.2013 17:30
.. ..

どこから始めればよいか、ヒントを教えてください。

次のコードで日付のみを挿入しています。

$startDate = $rsnew["starttime"];  
$endDate =  $rsnew["endtime"];      

// Convert to UNIX timestamps                          
$currentTime = strtotime($startDate);
$endTime = strtotime($endDate);

// Loop until we reach the last day
$result = array();                          
while ($currentTime <= $endTime) {
    if (date('N', $currentTime) < 6) {
        $result[] = date('Y-m-d', $currentTime);
    }
    $currentTime = strtotime('+1 day', $currentTime);
    echo "Hallo" .$currentTime;   
}  

// start insertion        
foreach($result as $value)        
{
    $MyResult = ew_Execute("INSERT INTO dates (date) VALUES ('".$value."')");
    echo "Hallo" .$value;                                                         
}                          
4

1 に答える 1

0

おそらくもうこれは必要ありませんが、これを行う簡単な方法は非常に効率的です。

$start    = new DateTime('2013-02-01');
$finish   = (new DateTime('2013-02-28'))->add(new DateInterval('P1D'));
$interval = new DateInterval('P1D');
$period   = new DatePeriod($start, $interval, $finish);
$dates    = array();

foreach ($period as $dt) {
    $dates[] = $dt->format('Y-m-d');
}

$MyResult = ew_Execute("INSERT INTO dates (date) VALUES ('" . implode("'),('", $dates) . "')");

これが行っていることです:

  1. 開始日と終了日のDateTimeオブジェクトを作成します(以下で作成するループには最終日が含まれないため、終了日に1日を追加する必要があります)。
  2. ループするとき(1日)にDateTimeをインクリメントする量を表すDateIntervalオブジェクトを作成します。
  3. 必要な日付をループできるようにするDatePeriodオブジェクトを作成します。
  4. 空の配列を作成して、後でデータベースに追加する日付を格納します。
  5. 開始日と終了日の間の日付をループして、配列に日付を追加します。
  6. 実行が高速な[ numdaysimplode() ]クエリの代わりに1つのクエリを作成するために使用します。
于 2014-01-07T02:21:33.523 に答える