Jump to content

Recommended Posts

Hey,

 

I have the below script that is supposed to archive articles that are older than 80 days and display them on a different page, but it doesnt seem to work. I have this script that will calculate an archive date and return results before and after that date depending on whether the user is viewing the archives.

 

I should mention my date format in the DB is ..eg:  "April 7, 2008"

 

<?php 

	   $days = 80; 

                   // Get todays date and minus 80 days from it to set the archive date
	   $archive = date("F j, Y",strtotime("-{$days} days"));
	  

                  // Check to see if the archive page is being viewed, if yes then get results that are older than the archive date we set above
	  if($_GET['archive'] == 1)
	  {
	  	$sql = "article_timestamp <= '".$archive ."'";

	  }
	  else
	  {
	    $sql = "article_timestamp >= '".$archive ."'";
	  }

                 // Now ad the corresponding sql insert to the query

$sql = "select * from article where $sql AND article_cat = 'Latest News' ORDER BY article_id desc";


?>

Link to comment
https://forums.phpfreaks.com/topic/110748-solved-date-amp-time-archiving-results/
Share on other sites

That date format cannot be directly sorted or compared using any greater-than/less-than operators, because the fields it is composed of it are not ordered, left to right, most-significant field to least-significant field.

 

In a date, the most significant field is the year (largest number), then month, then the least significant field is the day  (smallest number.) A sql DATE or DATETIME data type is formated yyyy-mm-dd for a reason. The fields it is made of are ordered left to right, most-significant field to least-significant field. This allows sorting and any kind of comparisons to work.

 

You could use the mysql STR_TO_DATE() function in your query to get a standard yyyy-mm-dd value from your existing date that you can than compare with a yyyy-mm-dd value of your choice, but this will make your query run slow as every value in every row will be passed through the STR_TO_DATE() function in order to do the comparison.

 

It would be better for your site's performance if you change your existing date column to a standard mysql DATE type. To retrieve a DATE type in any format you want, simply use the mysql DATE_FORMAT() function in your query.

Ah, I understand. Thats what I was thinking... I had a feeling the system was unable to sort using that date format but wasnt sure. I'll just change the DATE type in the MySQL table to a more standard one that will allow for me to arrange them < >.

 

Thanks for that!

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.