xml - Display name of the tools provided in the last X days using XPath in PHP

Back at it again with another XML/PHP problem. :)

On my webpage I want to display the names of the tools provided in the last X days. X is a number that will be entered by the user in a textbox, and after clicking the submit button, the names of the tools that have been provided in those last X days will appear.

This will be done by comparing the X value the user enters with the dates in my XML file, and to find the tools that match.

In my XML file, I have a "dateentered" node that stores a random date that I entered:

<tools>
  <tool type="..." web-based="..." free="...">
    <name>Facebook</name>
    <description>...</description>
    <url>...</url>
    <subjects>...</subjects>
    <creators>...</creators>
    <category>...</category>
    <price>...</price>
    <dateentered>2020-12-01</dateentered>
  </tool>
</tools>

Next, I created a function in PHP that basically converts the 'Y-M-D' format into days by subtracting the current date from whatever date you enter:

  function time2string($timeline) {

    $periods = array('day' => 86400);

    $ret = '';
    foreach($periods AS $name => $seconds){
        $num = floor($timeline / $seconds);
        $timeline -= ($num * $seconds);
        $ret .= $num;
    }

    return trim($ret);
}

Then, I loaded my xml file using simpleXML:

 $xml = simplexml_load_file('tools.xml');

So for example, using the XML code sample above and doing

 $days = $xml->xpath("//tool/dateentered");

 foreach ($days as $day) {
     print (time2string(time()-strtotime($day)));
 }

this converts '2020-12-02' to '1' and therefore outputs '1', meaning that the function works as it should.

With XPath, What I want to do is, I want to compare the value the user enters in the textbox with the converted 'dateentered' from my xml, and if they match, then I want to display the tool name.

So something like:

if(isset($_REQUEST["submit"])) {

   // time2string function

   $f_day = $_REQUEST["days"]; // getting the value the user enters in the textbox
   $xml = simplexml_load_file('tools.xml');

   // do something here

 }

So let's say, using the xml sample I provided above, if the user enters 1 in the textbox, the output should be:

Facebook

How can I solve this?

I'm also open for different approaches besides having to create a function, this is just what I came up with.

Answer

Solution:

Turns out, like @CBroe has said, I don't even need a function that converts date to days, instead, I can take advantage of PHP's date() and strtotime() functions as follows:

<?php

   if(isset($_REQUEST["submit"])) {

       $xml = simplexml_load_file('tools.xml');
       $f_days = $_REQUEST["days"];
       $days = date("Y-m-d", strtotime("-$f_days days"));
       $xdays = $xml->xpath("//tool[dateentered = '$days']/name");

      foreach ($xdays as $name) {
            echo "<h1 align='center'>".$name."</h1><br>";
      }

   }

?>

And this will output:

Facebook

Source