0

I'm trying to create a weekly work schedule. When I try to select the shifts from the database my date value is selecting the current time but the date (Y-m-d) from the table.

This is my code:

while ($row = mysqli_fetch_array($res))
{
          $dt = new DateTime();
          $dt->setISODate($year, $week);

          $fetch_mID = $row['ID_EMPLOYEE'];
          $fetch_fn = $row['Firstname'];
          $fetch_en = $row['Lastname'];
          echo "<tr>";
            echo "<td>" . $fetch_fn . " " . $fetch_en . "</td>";

            do {
              $obj = new ReflectionObject($dt);
              $pro = $obj->getProperty('date');
              $date = $pro->getValue($dt);
              echo $date; //Output = 'Y-m-d H:m:s'

              $shift = $conn->query("SELECT ShiftDate, ShiftStart, ShiftEnd FROM shifts WHERE ID_EMPLOYEE = '$fetch_mID' AND Date(ShiftDate) = '$date'");
              $fetch = mysqli_fetch_array($shift);
              $dt->modify('+1 day');
            } while ($week == $dt->format('W'));

I would expect the $date to output Y-m-d but it outputs Y-m-d H:m:s. And the time is the current time.

7
  • 1
    can you check what is the type of $date ? using gettype($date) Commented Apr 5, 2019 at 17:19
  • It is a string. Commented Apr 5, 2019 at 17:24
  • 3
    Warning: You are wide open to SQL Injections and should really use parameterized prepared statements instead of manually building your queries. They are provided by PDO or by MySQLi. Never trust any kind of input, especially that which comes from the client side. Even when your queries are executed only by trusted users, you are still in risk of corrupting your data. Commented Apr 5, 2019 at 17:39
  • So, why $dt = new DateTime(); $obj = new ReflectionObject($dt); $pro = $obj->getProperty('date'); $date = $pro->getValue($dt); echo $date; instead of just $date = $dt->format("Y-m-d");? Commented Apr 5, 2019 at 17:51
  • @miken32, It is faster than format(). Especially since it is in a loop. Commented Apr 5, 2019 at 18:16

1 Answer 1

1

The solution is to convert $date to date object and then format the date with the new format Y-m-d.

  $time = strtotime($date);
  $newformat = date('Y-m-d',$time);
  echo $newformat; // output 2019-04-05

You new code seems to b something like :

while ($row = mysqli_fetch_array($res))
{
          $dt = new DateTime();
          $dt->setISODate($year, $week);

          $fetch_mID = $row['ID_EMPLOYEE'];
          $fetch_fn = $row['Firstname'];
          $fetch_en = $row['Lastname'];
          echo "<tr>";
            echo "<td>" . $fetch_fn . " " . $fetch_en . "</td>";

            do {
              $obj = new ReflectionObject($dt);
              $pro = $obj->getProperty('date');
              $date = $pro->getValue($dt);
              //new code
              $newformat = date('Y-m-d',strtotime($date));
              echo $newformat; // output 2019-04-05
              // end new code
              $shift = $conn->query("SELECT ShiftDate, ShiftStart, ShiftEnd FROM shifts WHERE ID_EMPLOYEE = '$fetch_mID' AND Date(ShiftDate) = '$date'");
              $fetch = mysqli_fetch_array($shift);
              $dt->modify('+1 day');
            } while ($week == $dt->format('W'));
Sign up to request clarification or add additional context in comments.

6 Comments

Might wanna remove the extra ; in date('Y-m-d',strtotime($date);); = date('Y-m-d',strtotime($date));
Thank you. The output is now the correct format but it still doesn't select the values from the table.
what is the type of ShiftDate in the db ?
Nevermind. Just had to change the $date in the select to $newformat. You have my love. Many thanks.
Use DateTime class
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.