Jump to content

PHP and MySQL syntax

From LemonWiki共筆

mulitple approaches to completing the same/similar task using PHP, MySQL and Excel

Date time / unix timestamp[edit]

now[edit]

human readable time format[edit]

Convert unix timestamp (the number of seconds since 1970/01/01) <--> to the human readable time format ex: 2026-09-05 16:14:06

/* approach 1: */
SET time_zone='+8:00';
SELECT CURRENT_TIMESTAMP();

/* approach 2: Detect server timezone automatically! Note the precision of time difference between server timezone to your preferred timezone is hours NOT to minutes */
SELECT convert_tz(
   CURRENT_TIMESTAMP(),   
   CONCAT(
     ROUND(
      TIME_TO_SEC(timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00')))/3600),  ':00')
   , '+08:00');

/* approach 3: If you already know the server timezone ex: -05:00 */
SELECT convert_tz(CURRENT_TIMESTAMP,  '-05:00', '+08:00');
  • BASH (UNIX shell script) with GUN date installed in Linux , macOS icon_os_mac.png or Cygwin of Win :
    • echo $(date '+%Y-%m-%d %H:%M:%S')<ref>date Man Page - Linux - SS64.com</ref> or echo `date +\%Y-\%m-\%d\ %H:%M:%S` 2>&1 or date +\%Y-\%m-\%d\ %H:%M:%S Returns 2026-09-05 16:14:06 Icon_exclaim.gif server timezone dependent
    • date=`date -I`;echo $date; returns 2026-09-05 on Linux But it was not supported on Mac
and it showed the error message "illegal option -- I" Icon_exclaim.gif

current timestamp[edit]

The number of seconds since 1970/01/01. UTC±0 e.g. 2011-05-30 01:56:38 returns 1306720622

current Unix timestamp with microseconds

  • php: echo microtime(); PHP: microtime - Manual "Returns current Unix timestamp with microseconds" //ex: 0.45920500 1406776901

current Unix timestamp in milliseconds

  • javascript: getTime() Method ex: new Date().getTime(); //Return the number of milliseconds since 1970/01/01 <ref>JavaScript getTime() Method</ref>


compare the timestamp and human readable time format using MySQL

SELECT @@global.time_zone, @@session.time_zone;

SELECT UNIX_TIMESTAMP( ) , FROM_UNIXTIME( UNIX_TIMESTAMP( ) ,  '%Y-%m-%d %H:%i:%S' );
 /* 
 1st column: timezone of UNIX_TIMESTAMP( ) is UTC
 2nd column: 'FROM_UNIXTIME( UNIX_TIMESTAMP( ) ,  '%Y-%m-%d %H:%i:%S' )' is server timezone dependent
 */

How to print the number of nanoseconds or number of microseconds since 1970/01/01:

Unit Example Approach1: date Approach2: gdate<ref>macos - How to have GNU's date in OS X? - Ask Different</ref>
(Human readable) 2018-11-04 13:55:52 echo $(date '+%Y-%m-%d %H:%M:%S') for Linux , macOS icon_os_mac.png & CygWin on Win echo $(gdate '+%Y-%m-%d %H:%M:%S') for macOS icon_os_mac.png
the number of seconds since 1970/01/01 1541310952 echo $(date '+%s') for Linux , macOS icon_os_mac.png & CygWin on Win echo $(gdate '+%s') for macOS icon_os_mac.png
the number of microseconds since 1970/01/01 1541310952.181870 printf "%.6f\n" $(date '+%s.%N') for Linux & CygWin on Win printf "%.6f\n" $(gdate '+%s.%N') for macOS icon_os_mac.png
the number of nanoseconds since 1970/01/01 1541310952.181870383 echo $(date '+%s.%N') for Linux & CygWin on Win echo $(gdate '+%s.%N') for macOS icon_os_mac.png

Icon_exclaim.gif Since echo $(date '+%N') was not supported on macOS icon_os_mac.png <ref>macos - How to get Bash execution time in milliseconds under Mac OS X? - Super User</ref>, alternative approach is the installation of gdate.

Specified time[edit]

Convert the unix timestamp to human readable time format[edit]

ex: 2010-12-21 10:05:06

  • Epoch Converter - Unix Timestamp Converter
  • PHP: echo date("Y-m-d H:i:s", 1292897201 ); // Using date() function that converting the time stamp 1292897201 to the human readable time format. similar: gmdate() function [Last visited: 2014-04-30] Icon_exclaim.gif server timezone dependent
  • MySQL:
    • SELECT FROM_UNIXTIME( 1306311155 ); //convert the time stamp 1306311155 to the human readable time format 2011-05-25 08:12:11 Icon_exclaim.gif server timezone dependent
    • SELECT FROM_UNIXTIME( 1306311155, '%Y-%m-%d %H:%i:%S' ); //convert the time stamp 1306311155 to the human readable time format 2011-05-25 08:12:11 Icon_exclaim.gif server timezone dependent
    • convert mysql datatype timestamp (UTC) to Taipei datetime (client timezone dependent) <ref>timezone - How do I get the current time zone of MySQL? - Stack Overflow</ref>
/* approach1 */
SET time_zone='+8:00';
SELECT FROM_UNIXTIME( `column_of_timestamp` ,  '%Y-%m-%d %H:%i:%S' ) FROM `table`;

/* approach2: detect server timezone automatically. Note the precision of time difference between server timezone to your preferred timezone is hours NOT to minutes */
SELECT convert_tz(
   FROM_UNIXTIME( `column_of_timestamp` ,  '%Y-%m-%d %H:%i:%S' ),   
   CONCAT(
     ROUND(
      TIME_TO_SEC(timediff(now(),convert_tz(now(),@@session.time_zone,'+00:00')))/3600),  ':00')
   , '+08:00')
FROM `table`

/*  approach3: If you already know the server timezone ex: -05:00 */
SELECT convert_tz(
   FROM_UNIXTIME( `column_of_timestamp` ,  '%Y-%m-%d %H:%i:%S' ),  '-05:00', '+08:00')
FROM `table`

Convert human-readable time to timestamp (string to timestamp)[edit]

convert datevalue (number of days since 1900/1/1) ↔ to human-readable date

  • Excel: =DATEVALUE(Cell_of_date) // ex: =DATEVALUE("2015/1/27") returns 42031. DATEVALUE of 1900/1/1 is 1
  • Excel: =TEXT(Cell_of_datevalue,"yyyy/mm/dd") // ex: =TEXT(42031,"yyyy/mm/dd") returns 2015/1/27

convert month name to numeric date ex: September 5, 2026 -> 2026-09-5

Convert the datetime to ISO foamt time format[edit]

Using the DateTime::createFromFormat<ref>PHP convert date format dd/mm/yyyy => yyyy-mm-dd - Stack Overflow</ref>

$date = DateTime::createFromFormat('d/m/Y', "29/03/2021");
echo $date->format('Y-m-d');
// output: 2021-03-29

$date = DateTime::createFromFormat('M d D Y H:i', "Jun 04 Sun 2023 08:25");
echo $date->format('Y-m-d H:i:s');
// output: 2023-06-04 08:25:00

The following instruction written by ChatGPT

// The input datetime string
$input = "Jun 04 Sun 2023 08:25";

// Specify the input format
$inputFormat = "M d D Y H:i";

// Create a DateTime object from the input string
$dateTime = DateTime::createFromFormat($inputFormat, $input);

// Check if the DateTime object was created successfully
if ($dateTime === false) {
    echo "Failed to parse the input datetime string.";
} else {
    // Format the DateTime object into the desired ISO format
    $isoFormat = "Y-m-d H:i:s";
    $output = $dateTime->format($isoFormat);

    // Print the output
    echo $output; // "2023-06-04 08:25:00"
}

Convert date time from Zulu format[edit]

Convert date time from zulu format e.g. 2026-09-05T10:59:39.000Z

Previous month based on current month[edit]

today, yesterday or the day before yesterday[edit]

today

  • PHP: date('Y-m-d') or date('Y-m-d', TIME())
// JavaScript
var date = new Date();
date;

// output: Thu Oct 18 2018 16:10:33 GMT+0800 (台北標準時間)

yesterday //Returns sample: 2026-09-{{#time: d |now - 24 hours}}

  • MySQL:
    • SELECT DATE(CURRENT_TIMESTAMP - INTERVAL 1 DAY);
    • SELECT DATE_SUB(DATE( CURRENT_DATE() ), INTERVAL 1 DAY);
  • PHP: date('Y-m-d', strtotime("-1 days"))
// JavaScript
var date = new Date();
date.setDate(date.getDate() - 1);
date;

// output: Wed Oct 17 2018 16:15:43 GMT+0800 (台北標準時間)

the day before yesterday //Returns sample: 2026-09-{{#time: d |now - 48 hours}}


// JavaScript
var date = new Date();
date.setDate(date.getDate() - 2);
date;

// output: Wed Oct 16 2018 16:15:43 GMT+0800 (台北標準時間)

Day of week[edit]

Day of week

PHP microtime to MySQL timestamp[edit]

PHP microtime to MySQL timestamp

time difference of two time values[edit]

  • php: using mktime() function
  • mysql: using TIMEDIFF() function ex: SELECT TIMEDIFF('2016:02:01 00:00:00', '2016:01:01 00:00:00'); /* return 744:00:00 */ Icon_exclaim.gif time difference between two DATETIME values

timer[edit]

Timer

Date interval[edit]

When people said 2026-09-01 ~ 2026-09-03, it means 2026-09-01 00:00:00 ~ 2026-09-03 59:59:59 in the system.

Query by month[edit]

mysql ex: find the records in January, 2026<ref>sql - MySQL Query GROUP BY day / month / year - Stack Overflow</ref> Data type of column `time` is datetime or timestamp (e.g.: yy:mm:dd hh:mm:ss). Using one of sql queries as following. online demo

  • SELECT * FROM `table_name` WHERE YEAR(`time`) = '2026' AND MONTH(`time`) = '1' /*MONTH(`time`) = '1' or MONTH(`time`) = '01' are both ok*/
  • SELECT * FROM `table_name` WHERE DATE_FORMAT(`time`, '%Y-%m') = '2026-01'
  • SELECT * FROM `table_name` WHERE `time` LIKE '2026-01%' /*find the time records starting with the string 2026-01 */
  • SELECT * FROM `table_name` WHERE DATE(`time`) between '2026-01-01' AND '2026-01-31' Icon_exclaim.gif add the DATE function to the `time` field
  • SELECT * FROM `table_name` WHERE `time` >= '2026-01-01 00:00:00' AND `time` < '2026-02-01 00:00:00'
  • SELECT * FROM `table_name` WHERE `time` >= '2026-01-01 00:00:00' AND `time` <= '2026-01-31 59:59:59'

Query by day[edit]

Purpose: find the records in 2026-09-05 (2026-09-05 00:00:00 ~ 2026-09-05 23:59:59)

  • SELECT * FROM `table_name` WHERE `time` >= '2026-09-05 00:00:00' AND `time` <= '2026-09-05 23:59:59'
  • SELECT * FROM `table_name` WHERE `time` BETWEEN '2026-09-05 00:00:00' AND '2026-09-05 23:59:59'
  • SELECT * FROM `table_name` WHERE DATE(`time`) = '2026-09-05'

Days before[edit]

Days before

date format[edit]

YYYY-MM-DD e.g. 2026-09-05 was converted from 2026-09-05 01:23:45.

YYYY-MM-01: First day of the specific month<ref>mysql - How do I get the first day of the current month? - Stack Overflow</ref> e.g. 2026-09-01 was converted from 2026-09-05 01:23:45.

YYYYMM e.g. 202609 was converted from 2026-09-05 01:23:45.

further reading[edit]

Math[edit]

Format a number[edit]

Round a number downward to its nearest integer[edit]

other[edit]

  • a >0 OR b > 0 OR c > 0
  • a+b+c > 0


Text / String[edit]

Number of characters[edit]

Count number of characters

text match[edit]

//PHP code snippet:
$array = array("AAA", "BBB", "CCC");

if(in_array($var, $array){
//do something
}
  • preg_match...
if($var =="AAA" OR $var =="BBB" OR $var =="CCC"){
//do something
}


text input filter[edit]

List of binary safe functions[edit]

List of PHP binary safe functions

trigger to make backup of deleted data before deleting them[edit]

MySQL :: Re: before delete trigger to make backup of deleted data

step 1: create table hello_deleted_data with the same structure of table hello

step 2: add a trigger

create trigger hello before delete on hello 
for each row 
insert into hello_deleted_data (x,y,z) 
values (OLD.x, OLD.y, OLD.z); 

tested on version: mysqlnd 5.0.7-dev - 091210

redirect/reload to (another) page[edit]

redirect


reload

  • Javascript
    • iframe (reload) - parent.location.reload();

find unique (non duplicated) data[edit]

Export/Import the SQL file[edit]

MySQL commands

Export/Import the Excel file[edit]

Database management tools

reverse the boolean value[edit]

  • PHP:
$var = true;
print( !$var); //add ! symbol to reverse the boolean value

ideas[edit]

filter some records

  • approach 1: (1) select * under some condition, (2) collect the $identifiers which matched the condition. and then (3) select some records NOT IN ( $identifiers )
  • approach 2: (1) select * and then (2) unset some records which matched the condition.

documentation[edit]

How to generate the table schema

  1. Using phpMyAdmin or other MySQL client
  2. Input the SQL query:
    EXPLAIN table_name;
  3. Print view (with full texts)
  4. Easy to copy the table to other work processor
  5. (optional) Adjust the text size to 10

Debug[edit]

PHP

MySQL

References[edit]

<references/>