Can I get the timestamp in specific time zone? - php

I have a MySQL query that saves a comment in the database and save also the timestamp I want to save the timestamp in another time zone settings can i do it through the following query:
INSERT INTO tahminler
(comment, comment_text, match_id, user_id, timestamp)
VALUES ('$comment','$comment_text', $id, $user_id, now())

Yes. You can do it with date_default_timezone_set() on PHP.
<?php
echo date('Y-m-d H:i:s');// Your local server time
date_default_timezone_set('America/Los_Angeles');
echo "<br>";
echo date('Y-m-d H:i:s');// Los Angeles time
So replace your now() with date('Y-m-d H:i:s'); after setting the timezone of your choice.

You can try with this one
//default timezone
$date = new DateTime(null);
echo 'Default timezone: '.$date->getTimestamp().'<br />'."\r\n";
//America/New_York
$date = new DateTime(null, new DateTimeZone('America/New_York'));
echo 'America/New_York: '.$date->getTimestamp().'<br />'."\r\n";
Get the regular timestamp and add the UTC offset
//America/New_York
$date = new DateTime(null, new DateTimeZone('America/New_York'));
echo 'America/New_York: '.($date->getTimestamp() + $date->getOffset()).'<br />'."\r\n";

You can alter your table with add column timestamp like this....
ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
This adds a column called 'lastUpdated' with a default value of the current date/time. When that record is updated (lets say 5 minutes later) that timestamp will automatically update to the current time.

Related

How to insert the current date to database then retrieve it?

$query = mysql_query ('insert into pm timestamp values("'.strtotime("now").'")')
echo "<td>".date('d-M-Y H:i:s', $date3)."</td>
timestamp in database is INT(11)
I am able to get today date but I can't get the current time.
please help thank you !
You have to get the timestamp directly in your database with MySql and not with PHP. Change the type of your "timestamp" to timestamp and use the appropriate function "NOW()"
Your request would be like that : INSERT INTO table (timestamp) VALUES 'NOW()'
time();
Gives you current date and time in unix format - timestamp
$query = mysql_query ('insert into pm timestamp values("'.time().'")')
and after that when you retreive field value to var $date3 just echo it like you did
echo "<td>".date('d-M-Y H:i:s', $date3)."</td>";
If you want timestamp, use time()
php > echo time();
1406880195

php mysql last visit

I have website where the user can show his last visit to the website every time he logs in.
the type of last_activity column in the database is 'time'.
I made a code that shows the current date and save it in a variable $currentDate
and then set variable $currentDate into last_activity column in the database and update the column every time the user logs in.
but when I test the code I get this result:
your last visit: 00:00:00
the type of last_activity column in the database is 'time'.
here is my code:
<?php
session_start();
include('db.php');
date_default_timezone_set('Asia/Riyadh');
$currentDate = date('m/d/Y h:i:s a', time());
if(isset($_SESSION['Email']) === true)
{
mysql_query("UPDATE `table` SET `lastactivity` = ".$currentDate." WHERE email = '".$_SESSION['Email']."'");
$query = "SELECT * FROM `table` WHERE email = '".$_SESSION['Email']."'";
$run = mysql_query($query);
while($row = mysql_fetch_array($run))
{
$name = $row[1];
$active = $row[10];
echo 'welcome '.$name;
echo 'your last visit '.$active;
;
You should use the type DATETIME or TIMESTAMP to store a datetime value instead of TIME. The TIME datatype has no notion of dates:
The TIME Type
MySQL retrieves and displays TIME values in 'HH:MM:SS' format (or
'HHH:MM:SS' format for large hours values). TIME values may range from
'-838:59:59' to '838:59:59'.
...
Invalid TIME values are converted to '00:00:00'.
Because of that you get
your last visit: 00:00:00
back from the database as your output.
The DATE, DATETIME, and TIMESTAMP Types
The DATETIME type is used for values that contain both date and time
parts. MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD
HH:MM:SS' format. The supported range is '1000-01-01 00:00:00' to
'9999-12-31 23:59:59'.
Edit:
TIMESTAMP and in newer MySQL versions DATETIME columns have nice features, i.e. automatic update:
Automatic Initialization and Updating for TIMESTAMP and DATETIME
As of MySQL 5.6.5, TIMESTAMP and DATETIME columns can be automatically
initializated and updated to the current date and time (that is, the
current timestamp). Before 5.6.5, this is true only for TIMESTAMP, and
for at most one TIMESTAMP column per table.
Edit 2:
Furthermore produces
$currentDate = date('m/d/Y h:i:s a', time());
no valid format of an DATETIME literal. You could use STR_TO_DATE() to convert your value to DATETIME, but I wouldn't recommend this. Better you change your UPDATE statement using the MySQL function NOW() to:
mysql_query("UPDATE `table` SET `lastactivity` = NOW() WHERE email = '".$_SESSION['Email']."'");
You can format your DATETIME value, while retrieving it from MySQL with DATE_FORMAT() and give this computed column a name:
$query = "SELECT *, DATE_FORMAT(lastactivity, '%m/%d/%Y %h:%i%s %p') as last_activity FROM `table` WHERE email = '".$_SESSION['Email']."'";
$run = mysql_query($query);
while($row = mysql_fetch_array($run))
{
$name = $row[1];
$active = $row["last_activity"]; // access to the column by column name
// ...
Note
I recommend to switch from the deprecated mysql_* functions to PDO or mysqli with prepared statements and placeholders instead of concatenation of an sql statement.

Insert timestamp posted value in mysql in php

I have input where I get values like:
$water = 11/04/2013 00:00:00
(day/month/year) hour:minute:second
And a table definition:
CREATE TABLE `my_to` (
id_a INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
last_time timestamp ,
water timestamp
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
but when I am trying to do an insert I get no value in the table...
Should I convert the day or something?
supposing $water has a date and time value?
$timestamp = strtotime($water);
Insert into table .... $timestamp ?
You can use MySQL's STR_TO_DATE function:
INSERT INTO `table`( `date_field` )
VALUES( STR_TO_DATE( $water, '%d/%m/%Y %H:%i:%S' );
http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
Correct syntax is: 0000-00-00 00:00:00
so ..
$time = '11/04/2013 00:00:00';
$time = strtotime($time);
$time = date('Y-m-d H:i:s', $time);
# INSERT TIME...
The timestamp you want to insert must have the format YYYY-MM-DD HH:II:SS.
You can use date('Y-m-d H:i:s', strtotime($water)).
Hope this helps!
Timestamps in mysql must be in YYYY-MM-DD HH:II:SS format. You can do this in php with
Date('Y-m-d H:i:s', strtotime($water))
You could also use the FROM_UNIXTIME mysql function
water DATETIME
or fill the field with NOW() or CURRENT_TIMESTAMP
Be aware that strtotime() interprets that date in the format mm/dd/YYYY, and not as dd/mm/YYYY.
You should rearrange date in a different format (YYYY-mm-dd would be the best, imho).

Store php datetime in mysql database

I can't believe I can't do this, but I want to be able to store the current date and time from php in to a mysql table.
The column in the table is type datetime.
I've tried this
$current_date = date("Y-m-d");
$my_date = strtotime($current_date);
INSERT INTO my_table (date_time) VALUES ('$my_date')
but my timestamp comes up as 0000-00-00 00:00:00
This must be so easy to do but I just can't get it working!
I want to use the timestamp from php rather than using the mysql now() function
Try this:
$my_date = date("Y-m-d H:i:s");
INSERT INTO my_table (date_time) VALUES ('$my_date');
In the date-format parameter of the date function, use :
'H' for 24hr format
'h' for 12hr format
Don't save it as the Unix Timestamp (which strtotime() outputs), but as "2012-12-02 13:00" into the DATETIME column.
Create column type TIMESTAMP and set it to NOT NULL. Then pass in NULL during INSERT and MySQL will insert current date and time. This works for me.
set the 'type' of column named 'date_time' as 'DATETIME' and run the following query:
INSERT INTO my_table (`date_time`) VALUES (CURRENT_TIMESTAMP)
If you have the date in PHP as a timestamp, you can use the FROM_UNIXTIME function [1]
mysql> insert into table_name values (FROM_UNIXTIME(your_timestamp_here));
Hope it helped
[1]. https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_from-unixtime
Remove the strtotime()
$current_date = date("Y-m-d");
INSERT INTO my_table (date_time) VALUES ('$current_date')
If you want to include the hour, minutes and seconds,
$current_date = date("Y-m-d H:i:s");

Correct Date and Time Columns in MySQL

I have a timezone mismatch I need to correct in a table. All dates and times before unix timestamp 1253568477 need to have 5 hours added to their values to make them equal GMT.
I have the following columns...
date (data type date), off by -5 hours
time (data type time), off by -5 hours
timestamp (data type int), this column is the correct time
The reason the timezones are off is because of the way I was setting the values when inserting the rows...
$sql = "insert into email_opens (userid, email, serial, date, time, timestamp) values (
'$userid',
'$opened_by',
'$serial_number',
now(),
now()',
'".gmmktime()."'
)";
The now() value was using the server timezone (eastern) whereas the gmmktime value specified GMT. I have since corrected this query to always use GMT.
Is there a way I can add 5 hours to both time and date columns for those rows where timestamp < 1253568477 in one batch query?
Clarification:
My goal is to update each incorrect row in the table with the correct time by adding 5 hours to each value.
Try with this:
UPDATE mail_opens SET date = DATE_ADD(CONCAT(date, ' ', time), INTERVAL 5 HOUR), time = DATE_ADD(CONCAT(date, ' ', time), INTERVAL 5 HOUR);
And then you probably need this:
<?php
echo date('Y-m-d H:i:s')."<br>";
$addhours = strtotime('+5 hour');
echo $addhours."<br>";
$newdate = date('Y-m-d H:i:s', $addhours);
echo $newdate;
?>
So, using that:
<?php
$addhours = strtotime('+5 hour');
$newdate = date('Y-m-d H:i:s', $addhours);
$sql = "insert into email_opens (userid, email, serial, date, time, timestamp) values (
'$userid',
'$opened_by',
'$serial_number',
'$newdate',
'$newdate',
'".gmmktime()."'
)";
?>
sure, work out the time you corrected the problem so you know only to update records that have a value less than the unix timestamp of your timezone change.
Then update the field and add 60 * 60 * 5 (5 hours in seconds) to those records.
So, your query would be the following:
UPDATE email_opens SET timestamp = (timestamp + 18000) WHERE timestamp < 1253568477;
Cool.

Categories