sql comparing dates wrongly - php

<?php
date_default_timezone_set('Asia/Kolkata');
$currentDate = date("d M Y h:i:s a");
$sql=mysql_query("update products set past=0 where valid_date>'".$currentDate."'");
$sql1=mysql_query("update products set past=1 where valid_date<'".$currentDate."'");
?>
The above is my code. if valid_date is 31 Jan 2017 12:25:07 pm the SQL query still takes this as future date(i.e greater than today's date) but it takes 05 Feb 2017 12:25:07 pm as past. Precisely to say that the query is comparing February dates correctly and January dates wrongly.
what is wrong in my code?

Try this,
<?php
date_default_timezone_set('Asia/Kolkata');
$sql=mysql_query("update products set past = CASE WHEN valid_date > NOW() THEN 0 WHEN valide_date < NOW() THEN 1 END where 1 = 1");
?>
This is documentation for NOW() mysql function.
And as your condition states, this code will work.

Related

MySQL yearweek function space

I'm using the function yearweek in a select query.
My question = when the date = 2017-02-13 || yearweek = 201707. How can I get a space between 2017 07
You could use DATE_FORMAT:
CREATE TABLE tu(datum DATE);
INSERT INTO tu(datum) VALUES ('2017-02-13');
SELECT datum, DATE_FORMAT(datum, '%X %V'), YEARWEEK(datum)
FROM tu;
Output:
13.02.2017 00:00:00 2017 07 201707
Rextester Demo
%X Year for the week where Sunday is the first day of the week. Used with %V
%x Year for the week where Monday is the first day of the week. Used with %V

PHP Count Between Date and Todays Date

In my dates database I have a table of dates that have two followups to be completed, one after 30 days, one after 60 days. I need to build a page that uses the MySQL query to pull all dates from the dates table that have a 30day value of No (which I can do). Now the tricky part is, I need it to only output the dates that meet that criteria, and are 30 days from the current date.
For example: August 4 & 6 have a 30day value of No, August 5 has a 30day value of Yes. Today's date is September 4. 30-days prior would be August 5.
I need the query to only display August 4 in this case, since it hasn't been 30 days since August 6 and August 5 has already been done.
I am unsure what kind of function to use to do this counting. I appreciate your help
EDIT:
Date - 30day Value
July 1 - Yes
July 5 - No
August 1 - No
August 5 - No
August 6 - Yes
Today's Date is September 2.
The table would display July 5 and August 1, as their 30day values are No, and they are more than 30 days from todays date.
You should use DATEDIFF function:
SELECT ....
FROM your_table
WHERE DATEDIFF(CURDATE(), event_date) = 30
Where event_date is example of your date column.
MySQL's DATEDIFF function allows you to subtract 2 dates in a query.
http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_datediff
DATEDIFF() returns expr1 − expr2 expressed as a value in days from one date to the other. expr1 and expr2 are date or date-and-time expressions. Only the date parts of the values are used in the calculation.
For example:
SELECT some_id, date_column
FROM date_table
WHERE DATEDIFF(CURDATE(), date_column) = 30
You could also select both 30 and 60 days like this and also have a cutoff date of 60 days so it's not searching the whole table:
SELECT some_id, date_column
FROM date_table
WHERE date_column>=DATE_SUB(CURDATE(), INTERVAL 60 DAY)
AND DATEDIFF(CURDATE(), date_column) IN (30, 60)
And since I'm making some assumptions with my understanding of what you're asking, you may also want to do this which will return the results as 'Yes' or 'No' in your result set:
SELECT some_id, date_column,
CASE DATEDIFF(CURDATE(), date_column)
WHEN 60 THEN 'Yes'
WHEN 30 THEN 'Yes'
ELSE 'No'
END CASE AS is_3060_day
FROM date_table
WHERE date_column>=DATE_SUB(CURDATE(), INTERVAL 60 DAY)
Alternatively if you want to accomplish this on the PHP side, you could use PHP's date_diff function:
http://php.net/manual/en/function.date-diff.php
function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
$datetime1 = date_create($date_1);
$datetime2 = date_create($date_2);
$interval = date_diff($datetime1, $datetime2);
return $interval->format($differenceFormat);
}
$result = dateDifference($date1, $date2)
if ($result==30 || $result==60) {
// Do something
}
you can fetch both the dates and use the php function
$prevdate = date_create("2013-03-15");
$currdate = date_create("2013-12-12");
$diff = date_diff($prevdate,$currdate);
echo $diff->format("%R%a days");
Output
272 days

Get last 24 hours data from SQL

Hi all i want to select from my table all records from last 24h , 7days , 14 days ....( my sql timespan format is date("l, M d Y, h:i:s A")) so when i try to receive the data from last 24h is not working for me any help plz
exemple
if i get all date from
$result = mysql_query("SELECT * FROM stats");
result is Day,Date,time Count
Saturday, Feb 27 2016, 02:28:59 PM 27191 Saturday, Feb 27 2016, 03:28:05 PM 28659 Saturday, Feb 27 2016, 04:27:26 PM 30138
so i try like that and not working any help plz
$result = mysql_query("SELECT * FROM stats WHERE timespan >= now() - INTERVAL 1 DAY");
SELECT * FROM stats WHERE STR_TO_DATE(timespan,"%W, %b %d %Y, %h:%i:%s %p") >= date_sub(now(), INTERVAL 1 DAY)
STR_TO_DATE will convert your the string into date format (Y-m-d H:i:s) and then you can compare it with the date returned by now()
This should work. Make sure "timespan" exists and that it is a date. According to your example you should test on the "date" field.

How to select a php date() format in SQL

I have an SQL table with a field "time_created" in the form "Wed, 19 Aug 2015 03:58:00 -0600".
I need to check this field against today and perform a where statement according to it, as in
SELECT * FROM table WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time_created) >= 3600*24*30
to select records where time_created is older then a month.
Problem is UNIX_TIMESTAMP doesn't understand formats as "Wed, 19 Aug 2015 03:58:00 -0600". Any other way?
Try:
SELECT *
FROM table
WHERE DATE(NOW()) > DATE_SUB(STR_TO_DATE(time_created, '%a, %e %b %Y %T'), INTERVAL 1 MONTH)
This will find all records where the current date (DATE(NOW())) is bigger than time_created subtract ` month.

How to check two dates if dates between them exists or not with the database value

Example:
i have to check these dates:-> from=15 March 2013 & 15 April 2013 between the following dates whether any days falls in between these two date or not.
following data from db table
# from date to-date
-----------------------------------------
1 01 April 2013 30 April 2013 //here we will find as falling
2 01 May 2013 15 May 2013
3 01 June 2013 20 June 2013
I know only the below techniques to do for a single date checking but i don't know how to compare for 2 days.
// set some example data
$referenceDate = '01 April 2013';
$fromDate = '01 January 2013';
$toDate = '01 June 2013';
// convert dates to timestamps (strings to integers)
$referenceTimestamp = strtotime( $referenceDate );
$fromTimestamp = strtotime( $fromDate );
$toTimestamp = strtotime( $toDate );
// isBetween is Boolean TRUE if reference date is greater or equal fromDate and smaller or
equal toDate
$isBetween = $referenceTimestamp >= $fromTimestamp and $referenceTimestamp <= $toTimestamp;
You could use BETWEEN if you're using a mysql database.
SELECT * FROM `dt_tb` WHERE year( date_column ) between 2004 and 2005
"date_column" is a date field, "year" means that it's only looking to the years. For a full date check, try this:
SELECT * from `dt_tb` WHERE date_column BETWEEN "2001-01-05" AND"2001-01-10";

Categories