Jump to content

PHP and MySQL syntax: Difference between revisions

From LemonWiki共筆
Tag: wikieditor
 
(55 intermediate revisions by the same user not shown)
Line 1: Line 1:
mulitple approaches to completing the same/similar task using PHP, MySQL and Excel
mulitple approaches to completing the same/similar task using PHP, MySQL and Excel


== time / timestamp ==
== Date time / unix timestamp ==
=== terms of time format ===
<table border="1">
<tr>
  <td> format \ date </td>
  <td> 1900/1/1</td>
  <td> 1970/1/1</td>
  <td> 2016/1/1 </td>
  <td> notes </td>
</tr>
<tr>
  <td> value of unix timestamp <br /> (the number of seconds since 1970/01/01)</td>
  <td> -2209075200</td>
  <td> 0</td>
  <td> 1451606400</td>
  <td> </td>
</tr>
<tr>
  <td> value of Excel [https://support.office.com/zh-tw/article/DATEVALUE-%E5%87%BD%E6%95%B8-df8b07d4-7761-4a93-bc33-b7471bbff252 DATEVALUE] function <br />  (number of days since 1900/1/1) </td>
  <td> 1</td>
  <td> 25569</td>
  <td> 42370</td>
  <td> 5 digit numbers after 1970/1/1 </td>
</tr>
</table>


=== now ===
=== now ===
==== '''human readable''' time format ====
==== '''human readable''' time format ====
Convert '''unix timestamp''' (the number of seconds since 1970/01/01) <--> to the '''human readable''' time format ex: {{Template:Today}} {{CURRENTTIME}}:06
Convert '''unix timestamp''' (the number of seconds since 1970/01/01) <--> to the '''human readable''' time format ex: {{Template:Today}} {{CURRENTTIME}}:06
* php: {{kbd | key=<nowiki>echo date("Y-m-d H:i:s", time() );</nowiki>}} //Convert the time stamp of current time to the human readable time format. Ex: return '{{Template:Today}} {{CURRENTTIME}}:06' {{exclaim}} server timezone dependent
* php: {{kbd | key=<nowiki>echo date('Y-m-d H:i:s');</nowiki>}} or {{kbd | key=<nowiki>echo date('Y-m-d H:i:s', time() );</nowiki>}} //Convert the time stamp of current time to the human readable time format. Ex: return '{{Template:Today}} {{CURRENTTIME}}:06' {{exclaim}} server timezone dependent
* mysql: {{exclaim}} default client timezone is server timezone<ref>[https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html MySQL :: MySQL 5.5 Reference Manual :: 10.6 MySQL Server Time Zone Support]</ref>
* mysql: {{exclaim}} default client timezone is server timezone<ref>[https://dev.mysql.com/doc/refman/5.5/en/time-zone-support.html MySQL :: MySQL 5.5 Reference Manual :: 10.6 MySQL Server Time Zone Support]</ref>
** {{kbd | key=<nowiki>SELECT NOW();</nowiki>}} Returns {{Template:Today}} {{CURRENTTIME}}:06 which mapping to {{kbd | key=<nowiki>DATETIME</nowiki>}} type<ref>[http://dev.mysql.com/doc/refman/5.1/en/datetime.html MySQL :: MySQL 5.1 Reference Manual :: 11.3.1 The DATE, DATETIME, and TIMESTAMP Types]</ref>
** {{kbd | key=<nowiki>SELECT NOW();</nowiki>}} Returns {{Template:Today}} {{CURRENTTIME}}:06 which mapping to {{kbd | key=<nowiki>DATETIME</nowiki>}} type<ref>[http://dev.mysql.com/doc/refman/5.1/en/datetime.html MySQL :: MySQL 5.1 Reference Manual :: 11.3.1 The DATE, DATETIME, and TIMESTAMP Types]</ref>
Line 52: Line 28:
SELECT convert_tz(CURRENT_TIMESTAMP,  '-05:00', '+08:00');
SELECT convert_tz(CURRENT_TIMESTAMP,  '-05:00', '+08:00');
</pre>
</pre>
* shell script with GUN {{kbd | key=<nowiki>date</nowiki>}} installed in {{Linux}}, {{Mac}} or [https://www.cygwin.com/ Cygwin] of {{Win}}:  
 
** {{kbd | key=<nowiki>echo `date +\%Y-\%m-\%d\ %H:%M:%S` 2>&1</nowiki>}} or  {{kbd | key=<nowiki>date +\%Y-\%m-\%d\ %H:%M:%S</nowiki>}} Returns {{Template:Today}} {{CURRENTTIME}}:06 {{exclaim}} server timezone dependent
* BASH (UNIX shell script) with GUN {{kbd | key=<nowiki>date</nowiki>}} installed in {{Linux}}, {{Mac}} or [https://www.cygwin.com/ Cygwin] of {{Win}}:  
** {{kbd | key=<nowiki>echo `TZ=Asia/Taipei date +\%Y-\%m-\%d\ %H:%M:%S` 2>&1</nowiki>}} or {{kbd | key=<nowiki>TZ=Asia/Taipei date +\%Y-\%m-\%d\ %H:%M:%S</nowiki>}} Returns {{Template:Today}} {{CURRENTTIME}}:06 {{exclaim}} force to use Taipei timezone
** {{kbd | key=<nowiki>echo $(date '+%Y-%m-%d %H:%M:%S')</nowiki>}}<ref>[https://ss64.com/bash/date.html date Man Page - Linux - SS64.com]</ref> or {{kbd | key=<nowiki>echo `date +\%Y-\%m-\%d\ %H:%M:%S` 2>&1</nowiki>}} or  {{kbd | key=<nowiki>date +\%Y-\%m-\%d\ %H:%M:%S</nowiki>}} Returns {{Template:Today}} {{CURRENTTIME}}:06 {{exclaim}} server timezone dependent
** {{kbd | key=<nowiki>date=`date -I`;echo $date;</nowiki>}} returns {{Template:Today}} on {{Linux}} But it was not supported on Mac
and it showed the error message "illegal option -- I" {{exclaim}}


==== current '''timestamp''' ====
==== current '''timestamp''' ====
the number of seconds since 1970/01/01. [https://zh.wikipedia.org/wiki/UTC%C2%B10 UTC±0]
 
The number of '''seconds''' since 1970/01/01. [https://zh.wikipedia.org/wiki/UTC%C2%B10 UTC±0] e.g. 2011-05-30 01:56:38 returns 1306720622
* BASH for {{Linux}} & {{Mac}}: {{kbd | key=<nowiki>echo $(date +%s)</nowiki>}} "%s - seconds since 1970-01-01 00:00:00 UTC"<ref>[https://linux.die.net/man/1/date date(1): print/set system date/time - Linux man page]</ref>
* BASH for {{Mac}}: (1) {{kbd | key=<nowiki>brew install coreutils</nowiki>}} (2) key-in {{kbd | key=<nowiki>gdate +%s</nowiki>}}<ref>[https://www.gsp.com/cgi-bin/man.cgi?section=1&topic=gdate gdate(1) - print or set the system date and time]</ref>
* php: {{kbd | key=<nowiki>echo time();</nowiki>}}
* php: {{kbd | key=<nowiki>echo time();</nowiki>}}
* mysql: {{kbd | key=<nowiki>SELECT UNIX_TIMESTAMP();</nowiki>}}
* EXCEL: [http://stackoverflow.com/questions/1703505/excel-date-to-unix-timestamp Excel date to Unix timestamp - Stack Overflow]
'''current Unix timestamp with microseconds'''
* php: {{kbd | key=<nowiki>echo microtime();</nowiki>}}  [http://php.net/manual/en/function.microtime.php PHP: microtime - Manual] "Returns current Unix timestamp with microseconds" //ex: 0.45920500 1406776901
* php: {{kbd | key=<nowiki>echo microtime();</nowiki>}}  [http://php.net/manual/en/function.microtime.php PHP: microtime - Manual] "Returns current Unix timestamp with microseconds" //ex: 0.45920500 1406776901
* mysql: {{kbd | key=<nowiki>SELECT UNIX_TIMESTAMP();</nowiki>}} //ex: 2011-05-30 01:56:38 returns 1306720622
 
'''current Unix timestamp in milliseconds'''
* javascript: getTime() Method ex: {{kbd | key=<nowiki>new Date().getTime();</nowiki>}} //Return the number of milliseconds since 1970/01/01 <ref>[http://w3schools.com/jsref/jsref_gettime.asp JavaScript getTime() Method]</ref>
* javascript: getTime() Method ex: {{kbd | key=<nowiki>new Date().getTime();</nowiki>}} //Return the number of milliseconds since 1970/01/01 <ref>[http://w3schools.com/jsref/jsref_gettime.asp JavaScript getTime() Method]</ref>
* EXCEL: [http://stackoverflow.com/questions/1703505/excel-date-to-unix-timestamp Excel date to Unix timestamp - Stack Overflow]
 


compare the timestamp and human readable time format using MySQL
compare the timestamp and human readable time format using MySQL
Line 75: Line 61:
</pre>
</pre>


How to print the number of nanoseconds or number of microseconds since 1970/01/01:
<div style="width:100%; min-height: .01%; overflow-x: auto;">
<table border="1" class="wikitable sortable nowrap">
<tr>
  <th>Unit </th>
  <th>Example </th>
  <th>Approach1: {{kbd | key=date}}</th>
  <th>Approach2: {{kbd | key=gdate}}<ref>[https://apple.stackexchange.com/questions/231224/how-to-have-gnus-date-in-os-x macos - How to have GNU's date in OS X? - Ask Different]</ref></th>
</tr>
<tr>
  <td>(Human readable)</td>
  <td>2018-11-04 13:55:52</td>
  <td>{{kbd | key=<nowiki>echo $(date '+%Y-%m-%d %H:%M:%S')</nowiki>}} for {{Linux}}, {{Mac}} & CygWin on {{Win}}</td>
  <td>{{kbd | key=<nowiki>echo $(gdate '+%Y-%m-%d %H:%M:%S')</nowiki>}} for {{Mac}}</td>
</tr>
<tr>
  <td>the number of seconds since 1970/01/01</td>
  <td>1541310952</td>
  <td>{{kbd | key=<nowiki>echo $(date '+%s')</nowiki>}} for {{Linux}}, {{Mac}} & CygWin on {{Win}}</td>
  <td>{{kbd | key=<nowiki>echo $(gdate '+%s')</nowiki>}} for {{Mac}}</td>
</tr>
<tr>
  <td>the number of microseconds since 1970/01/01</td>
  <td>1541310952.181870</td>
  <td>{{kbd | key=<nowiki>printf "%.6f\n" $(date '+%s.%N')</nowiki>}} for {{Linux}} & CygWin on {{Win}}</td>
  <td>{{kbd | key=<nowiki>printf "%.6f\n" $(gdate '+%s.%N')</nowiki>}} for {{Mac}}</td>
</tr>
<tr>
<tr>
  <td>the number of nanoseconds since 1970/01/01</td>
  <td>1541310952.181870383</td>
  <td>{{kbd | key=<nowiki>echo $(date '+%s.%N')</nowiki>}} for {{Linux}} & CygWin on {{Win}}</td>
  <td>{{kbd | key=<nowiki>echo $(gdate '+%s.%N')</nowiki>}} for {{Mac}}</td>
</tr>
<tr>
</table>
</div>


{{exclaim}} Since {{kbd | key=<nowiki>echo $(date '+%N')</nowiki>}} was not supported on {{Mac}}<ref>[https://superuser.com/questions/599072/how-to-get-bash-execution-time-in-milliseconds-under-mac-os-x macos - How to get Bash execution time in milliseconds under Mac OS X? - Super User]</ref>, alternative approach is the installation of {{kbd | key=gdate}}.


=== specified time ===
=== Specified time ===
==== Convert the unix timestamp to '''human readable''' time format ====
==== Convert the unix timestamp to '''human readable''' time format ====
ex: 2010-12-21 10:05:06
ex: 2010-12-21 10:05:06
Line 108: Line 132:
** {{kbd | key==( unix_time_stamp /86400)+DATE(1970,1,1) }} // convert the unix time stamp 1421539200 to the human readable time format 2015/1/18 <ref>[http://www.bajb.net/2010/05/excel-timestamp-to-date/ Excel Timestamp to Date ← Automate Everything]</ref>
** {{kbd | key==( unix_time_stamp /86400)+DATE(1970,1,1) }} // convert the unix time stamp 1421539200 to the human readable time format 2015/1/18 <ref>[http://www.bajb.net/2010/05/excel-timestamp-to-date/ Excel Timestamp to Date ← Automate Everything]</ref>


==== Convert human-readable time to '''timestamp''' ====
==== Convert human-readable time to '''timestamp''' (string to timestamp) ====
* PHP: using [http://php.net/manual/en/function.strtotime.php strtotime()] function ex: strtotime('2010-12-21 10:05:06') <ref>[http://stackoverflow.com/questions/113829/how-to-convert-date-to-timestamp-in-php How to convert date to timestamp in PHP? - Stack Overflow]</ref>
* PHP: Using [http://php.net/manual/en/function.strtotime.php strtotime()] function ex: strtotime('2010-12-21 10:05:06') <ref>[http://stackoverflow.com/questions/113829/how-to-convert-date-to-timestamp-in-php How to convert date to timestamp in PHP? - Stack Overflow]</ref>
* mysql:  
* mysql: Using [https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_unix-timestamp UNIX_TIMESTAMP()] function
** {{kbd | key = SELECT UNIX_TIMESTAMP('2011-03-15 18:53:57');}} /* return timestamp: 1300186437 */ {{exclaim}} server timezone dependent
** {{kbd | key = SELECT UNIX_TIMESTAMP('2011-03-15 18:53:57');}} /* return timestamp: 1300186437 */ {{exclaim}} server timezone dependent
** {{kbd | key = SELECT UNIX_TIMESTAMP(STR_TO_DATE('2011-03-15 18:53:57', '%Y-%m-%d %H:%i:%S'));}} /* return timestamp: 1300186437 */ {{exclaim}} server timezone dependent
** {{kbd | key = SELECT UNIX_TIMESTAMP(STR_TO_DATE('2011-03-15 18:53:57', '%Y-%m-%d %H:%i:%S'));}} /* return timestamp: 1300186437 */ {{exclaim}} server timezone dependent
Line 125: Line 149:
* MySQL: [http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date STR_TO_DATE(str,format)] ex: {{kbd | key=SELECT STR_TO_DATE('{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}', '%M %d, %Y');}} // Returns {{Template:Today}} <ref>[http://stackoverflow.com/questions/7027129/mysql-monthname-from-numbers MySQL MONTHNAME() from numbers - Stack Overflow]</ref>
* MySQL: [http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date STR_TO_DATE(str,format)] ex: {{kbd | key=SELECT STR_TO_DATE('{{CURRENTMONTHNAME}} {{CURRENTDAY}}, {{CURRENTYEAR}}', '%M %d, %Y');}} // Returns {{Template:Today}} <ref>[http://stackoverflow.com/questions/7027129/mysql-monthname-from-numbers MySQL MONTHNAME() from numbers - Stack Overflow]</ref>
* Excel
* Excel
==== Convert the datetime to ISO foamt time format ====
Using the [https://www.php.net/manual/en/datetime.createfromformat.php DateTime::createFromFormat]<ref>[https://stackoverflow.com/questions/10306999/php-convert-date-format-dd-mm-yyyy-yyyy-mm-dd PHP convert date format dd/mm/yyyy => yyyy-mm-dd - Stack Overflow]</ref>
<pre>
$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
</pre>
The following instruction written by ChatGPT
<pre>
// 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"
}
</pre>
==== Convert date time from Zulu format ====
[[Convert date time from zulu format]] e.g. {{Template:Today}}T10:59:39.000Z


==== Previous month based on current month ====
==== Previous month based on current month ====
Line 141: Line 205:
** {{kbd | key=<nowiki>=TEXT(TODAY(), "YYYY-MM-DD")</nowiki>}} Returns {{Template:Today}} <ref>[https://www.ablebits.com/office-addins-blog/2015/03/11/change-date-format-excel/ How to change Excel date format and create custom formatting]</ref>
** {{kbd | key=<nowiki>=TEXT(TODAY(), "YYYY-MM-DD")</nowiki>}} Returns {{Template:Today}} <ref>[https://www.ablebits.com/office-addins-blog/2015/03/11/change-date-format-excel/ How to change Excel date format and create custom formatting]</ref>


* PHP: {{kbd | key =<nowiki>date('Y-m-d', TIME())</nowiki>}}
* PHP: {{kbd | key =<nowiki>date('Y-m-d')</nowiki>}} or {{kbd | key =<nowiki>date('Y-m-d', TIME())</nowiki>}}
 
* Javascript: [https://www.w3schools.com/jsref/jsref_obj_date.asp JavaScript Date Reference] {{access | date=2018-10-18}}


* Shell script in {{Linux}} or {{Mac}}  with GUN {{kbd | key=<nowiki>date</nowiki>}} installed.   
* Shell script in {{Linux}} or {{Mac}}  with GUN {{kbd | key=<nowiki>date</nowiki>}} installed.   
Line 147: Line 213:
** specify timezone: {{kbd | key=<nowiki>echo $(TZ=":Asia/Taipei" date +"%Y-%m-%d")</nowiki>}} or {{kbd | key=<nowiki>echo $(TZ=":US/Eastern" date +"%Y-%m-%d")</nowiki>}}<ref>[http://unix.stackexchange.com/questions/48101/how-can-i-have-date-output-the-time-from-a-different-timezone How can I have `date` output the time from a different timezone? - Unix & Linux Stack Exchange]</ref>
** specify timezone: {{kbd | key=<nowiki>echo $(TZ=":Asia/Taipei" date +"%Y-%m-%d")</nowiki>}} or {{kbd | key=<nowiki>echo $(TZ=":US/Eastern" date +"%Y-%m-%d")</nowiki>}}<ref>[http://unix.stackexchange.com/questions/48101/how-can-i-have-date-output-the-time-from-a-different-timezone How can I have `date` output the time from a different timezone? - Unix & Linux Stack Exchange]</ref>


<pre>
// JavaScript
var date = new Date();
date;
// output: Thu Oct 18 2018 16:10:33 GMT+0800 (台北標準時間)
</pre>


yesterday //Returns sample: {{CURRENTYEAR}}-{{CURRENTMONTH}}-{{#time: d |now - 24 hours}}
yesterday //Returns sample: {{CURRENTYEAR}}-{{CURRENTMONTH}}-{{#time: d |now - 24 hours}}
Line 156: Line 229:


* PHP: {{kbd | key =<nowiki>date('Y-m-d', strtotime("-1 days"))</nowiki>}}
* PHP: {{kbd | key =<nowiki>date('Y-m-d', strtotime("-1 days"))</nowiki>}}
* JavaScript: [https://stackoverflow.com/questions/5511323/calculate-the-date-yesterday-in-javascript Calculate the date yesterday in JavaScript - Stack Overflow] {{access | date=2018-10-18}}


* Shell script in {{Linux}} with GUN {{kbd | key=<nowiki>date</nowiki>}} installed. '''Not''' work on {{Mac}}   
* Shell script in {{Linux}} with GUN {{kbd | key=<nowiki>date</nowiki>}} installed. '''Not''' work on {{Mac}}   
Line 161: Line 236:
** {{kbd | key=<nowiki> date -d '-1 day' '+%Y-%m-%d' </nowiki>}}<ref>[http://stackoverflow.com/questions/22043088/how-to-get-yesterday-and-day-before-yesterday-in-linux shell - How to get yesterday and day before yesterday in linux? - Stack Overflow]</ref>
** {{kbd | key=<nowiki> date -d '-1 day' '+%Y-%m-%d' </nowiki>}}<ref>[http://stackoverflow.com/questions/22043088/how-to-get-yesterday-and-day-before-yesterday-in-linux shell - How to get yesterday and day before yesterday in linux? - Stack Overflow]</ref>
** specify timezone: {{kbd | key=<nowiki>echo $(TZ=":Asia/Taipei" date -d "yesterday" '+%Y-%m-%d')</nowiki>}} or {{kbd | key=<nowiki>echo $(TZ=":US/Eastern" date -d "yesterday" '+%Y-%m-%d')</nowiki>}}
** specify timezone: {{kbd | key=<nowiki>echo $(TZ=":Asia/Taipei" date -d "yesterday" '+%Y-%m-%d')</nowiki>}} or {{kbd | key=<nowiki>echo $(TZ=":US/Eastern" date -d "yesterday" '+%Y-%m-%d')</nowiki>}}
<pre>
// JavaScript
var date = new Date();
date.setDate(date.getDate() - 1);
date;
// output: Wed Oct 17 2018 16:15:43 GMT+0800 (台北標準時間)
</pre>


the day before yesterday //Returns sample: {{CURRENTYEAR}}-{{CURRENTMONTH}}-{{#time: d |now - 48 hours}}
the day before yesterday //Returns sample: {{CURRENTYEAR}}-{{CURRENTMONTH}}-{{#time: d |now - 48 hours}}
Line 170: Line 254:
* Shell script in {{Linux}} with GUN {{kbd | key=<nowiki>date</nowiki>}} installed. '''Not''' work on {{Mac}}   
* Shell script in {{Linux}} with GUN {{kbd | key=<nowiki>date</nowiki>}} installed. '''Not''' work on {{Mac}}   
** {{kbd | key=<nowiki> date -d '-2 day' '+%Y-%m-%d' </nowiki>}}<ref>[http://stackoverflow.com/questions/22043088/how-to-get-yesterday-and-day-before-yesterday-in-linux shell - How to get yesterday and day before yesterday in linux? - Stack Overflow]</ref>
** {{kbd | key=<nowiki> date -d '-2 day' '+%Y-%m-%d' </nowiki>}}<ref>[http://stackoverflow.com/questions/22043088/how-to-get-yesterday-and-day-before-yesterday-in-linux shell - How to get yesterday and day before yesterday in linux? - Stack Overflow]</ref>
<pre>
// JavaScript
var date = new Date();
date.setDate(date.getDate() - 2);
date;
// output: Wed Oct 16 2018 16:15:43 GMT+0800 (台北標準時間)
</pre>


==== Day of week ====
==== Day of week ====
Line 201: Line 295:
* SELECT * FROM `table_name` WHERE `time` BETWEEN '{{Template:Today}} 00:00:00' AND '{{Template:Today}} 23:59:59'
* SELECT * FROM `table_name` WHERE `time` BETWEEN '{{Template:Today}} 00:00:00' AND '{{Template:Today}} 23:59:59'
* SELECT * FROM `table_name` WHERE DATE(`time`) = '{{Template:Today}}'
* SELECT * FROM `table_name` WHERE DATE(`time`) = '{{Template:Today}}'
=== Days before ===
[[Days before]]


=== date format ===
=== date format ===
Line 239: Line 336:


== Text / String ==
== Text / String ==
=== length of characters ===
=== Number of characters ===
* PHP: [http://php.net/mb_strlen PHP mb_strlen function]
 
<pre>
[[Count number of characters]]
echo mb_strlen("《王大文 Dawen》", 'UTF-8'); // return 11
echo strlen("《王大文 Dawen》"); // return 21
</pre>
* MySQL: [http://www.w3resource.com/mysql/string-functions/mysql-char_length-function.php MySQL CHAR_LENGTH() function]
<PRE>
SELECT CHAR_LENGTH("《王大文 Dawen》"); /* return 11 */
SELECT LENGTH("《王大文 Dawen》"); /* return 21 */
</PRE>
* Excel: [https://support.office.com/en-us/article/LEN-LENB-functions-29236f94-cedc-429d-affd-b5e33d2c67cb?ui=en-US&rs=en-US&ad=US LEN function] / [https://support.office.com/zh-tw/article/LEN%E3%80%81LENB-%E5%87%BD%E6%95%B8-29236f94-cedc-429d-affd-b5e33d2c67cb LEN 函數]
<pre>
=LEN("《王大文 Dawen》") // return 11
</pre>
* [http://string-functions.com/length.aspx Calculate String Length Online]


=== text match ===
=== text match ===
Line 280: Line 364:
* {{Gd}} [http://php.net/manual/en/pdo.prepare.php PHP: PDO::prepare] + [http://php.net/manual/en/pdostatement.bindparam.php PDOStatement::bindParam]
* {{Gd}} [http://php.net/manual/en/pdo.prepare.php PHP: PDO::prepare] + [http://php.net/manual/en/pdostatement.bindparam.php PDOStatement::bindParam]
* [http://www.php.net/manual/en/mysqli.real-escape-string.php PHP: mysqli::real_escape_string]
* [http://www.php.net/manual/en/mysqli.real-escape-string.php PHP: mysqli::real_escape_string]
== List of binary safe functions ==
[[List of PHP binary safe functions]]


== trigger to make backup of deleted data before deleting them ==
== trigger to make backup of deleted data before deleting them ==
Line 316: Line 403:
* SELECT column FROM table GROUP BY column
* SELECT column FROM table GROUP BY column


== export/import sql file ==
== Export/Import the SQL file ==
[[MySQL commands]]
[[MySQL commands]]
== Export/Import the Excel file ==
[[Database management tools]]


== reverse the boolean value ==
== reverse the boolean value ==
Line 341: Line 431:
# (optional) Adjust the text size to 10
# (optional) Adjust the text size to 10


== debug ==
== Debug ==
[[SQL syntax debug]]
PHP
* [https://www.php.net/manual/en/function.debug-backtrace.php PHP: debug_backtrace - Manual]
 
MySQL
* [[SQL syntax debug]]


== references ==
== References ==
<references/>
<references/>


Line 350: Line 444:
[[Category:Web_Dev]]
[[Category:Web_Dev]]
[[Category:MySQL]]
[[Category:MySQL]]
[[Category:Bash]]
[[Category:Data_hygiene]]
[[Category:Data_hygiene]]
[[Category:Data Science]]
[[Category:Data Science]]
[[Category:Database]]
[[Category:Time river]]

Latest revision as of 11:16, 27 June 2024

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-10-18 22:13:06

  • php: echo date('Y-m-d H:i:s'); or echo date('Y-m-d H:i:s', time() ); //Convert the time stamp of current time to the human readable time format. Ex: return '2026-10-18 22:13:06' Icon_exclaim.gif server timezone dependent
  • mysql: Icon_exclaim.gif default client timezone is server timezone[1]
    • SELECT NOW(); Returns 2026-10-18 22:13:06 which mapping to DATETIME type[2]
    • SELECT NOW()+0; //2011-04-01 12:19:43 returns 20110401122023.000000
    • SELECT CURRENT_TIMESTAMP; Returns 2026-10-18 22:13:06 Icon_exclaim.gif Current time zone of MySQL is SYSTEM & client timezone dependent.
    • convert mysql datatype timestamp (UTC) to Taipei datetime (client timezone dependent) [3]
/* 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')[4] or echo `date +\%Y-\%m-\%d\ %H:%M:%S` 2>&1 or date +\%Y-\%m-\%d\ %H:%M:%S Returns 2026-10-18 22:13:06 Icon_exclaim.gif server timezone dependent
    • date=`date -I`;echo $date; returns 2026-10-18 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

  • BASH for Linux & macOS icon_os_mac.png : echo $(date +%s) "%s - seconds since 1970-01-01 00:00:00 UTC"[5]
  • BASH for macOS icon_os_mac.png : (1) brew install coreutils (2) key-in gdate +%s[6]
  • php: echo time();
  • mysql: SELECT UNIX_TIMESTAMP();
  • EXCEL: Excel date to Unix timestamp - Stack Overflow

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 [7]


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[8]
(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 [9], 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) [10]
/* 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`
  • Excel
    • =( unix_time_stamp /86400)+DATE(1970,1,1) // convert the unix time stamp 1421539200 to the human readable time format 2015/1/18 [11]

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

  • PHP: Using strtotime() function ex: strtotime('2010-12-21 10:05:06') [12]
  • mysql: Using UNIX_TIMESTAMP() function
    • SELECT UNIX_TIMESTAMP('2011-03-15 18:53:57'); /* return timestamp: 1300186437 */ Icon_exclaim.gif server timezone dependent
    • SELECT UNIX_TIMESTAMP(STR_TO_DATE('2011-03-15 18:53:57', '%Y-%m-%d %H:%i:%S')); /* return timestamp: 1300186437 */ Icon_exclaim.gif server timezone dependent
  • Excel:
    • input data (A2 cell): YYYY/MM/DD (e.g. 2026/10/18 ) or YYYY/MM/DD HH:MM (e.g. 2026/10/18 22:13)
    • =(A2-DATE(1970,1,1))*86400 [13]

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: October 18, 2026 -> 2026-10-18

Convert the datetime to ISO foamt time format[edit]

Using the DateTime::createFromFormat[15]

$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-10-18T10:59:39.000Z

Previous month based on current month[edit]

  • PHP: echo date("Y-m", strtotime("-1 month")); // Returns YYYY-MM [16]
  • MySQL:
    • Returns YYYY-MM: Using DATE_FORMAT & DATE_ADD functions. SELECT DATE_FORMAT(NOW() - INTERVAL 1 MONTH, "%Y-%m"); [17]
    • Returns YYYY-MM-DD: SELECT DATE(NOW() - INTERVAL 1 MONTH);
  • Excel: Using EOMONTH() function. =YEAR(EOMONTH(NOW(), -2)+1)&"-"&TEXT(MONTH(EOMONTH(NOW(), -2)+1), "00") // Returns YYYY-MM [18]

today, yesterday or the day before yesterday[edit]

today

  • MySQL: SELECT CURRENT_DATE(); or SELECT CURDATE(); Returns 2026-10-18 [19]
  • EXCEL:
    • =TODAY() Returns 2026/10/18 [20]
    • =TEXT(TODAY(), "YYYY-MM-DD") Returns 2026-10-18 [21]
  • PHP: date('Y-m-d') or date('Y-m-d', TIME())
  • Shell script in Linux or macOS icon_os_mac.png with GUN date installed.
    • echo $(date +"%Y-%m-%d") or echo `date +\%Y-\%m-\%d` 2>&1 or date +"%Y-%m-%d" Returns 2026-10-18[22]
    • specify timezone: echo $(TZ=":Asia/Taipei" date +"%Y-%m-%d") or echo $(TZ=":US/Eastern" date +"%Y-%m-%d")[23]
// JavaScript
var date = new Date();
date;

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

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

  • MySQL:
    • SELECT DATE(CURRENT_TIMESTAMP - INTERVAL 1 DAY);
    • SELECT DATE_SUB(DATE( CURRENT_DATE() ), INTERVAL 1 DAY);
  • EXCEL: =TEXT(TODAY()-1, "YYYY-MM-DD") [24]
  • PHP: date('Y-m-d', strtotime("-1 days"))
  • Shell script in Linux with GUN date installed. Not work on macOS icon_os_mac.png
    • echo $(date -d "yesterday" '+%Y-%m-%d')[25]
    • date -d '-1 day' '+%Y-%m-%d' [26]
    • specify timezone: echo $(TZ=":Asia/Taipei" date -d "yesterday" '+%Y-%m-%d') or echo $(TZ=":US/Eastern" date -d "yesterday" '+%Y-%m-%d')
// 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-10-{{#time: d |now - 48 hours}}

  • MySQL
    • SELECT DATE(CURRENT_TIMESTAMP - INTERVAL 2 DAY);
    • SELECT DATE_SUB(DATE( CURRENT_DATE() ), INTERVAL 2 DAY);
  • EXCEL: =TEXT(TODAY()-2, "YYYY-MM-DD")
  • PHP: date('Y-m-d', strtotime("-2 days"))
  • Shell script in Linux with GUN date installed. Not work on macOS icon_os_mac.png
    • date -d '-2 day' '+%Y-%m-%d' [27]


// 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-10-01 ~ 2026-10-03, it means 2026-10-01 00:00:00 ~ 2026-10-03 59:59:59 in the system.

Query by month[edit]

mysql ex: find the records in January, 2026[28] 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-10-18 (2026-10-18 00:00:00 ~ 2026-10-18 23:59:59)

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

Days before[edit]

Days before

date format[edit]

YYYY-MM-DD e.g. 2026-10-18 was converted from 2026-10-18 01:23:45.

YYYY-MM-01: First day of the specific month[29] e.g. 2026-10-01 was converted from 2026-10-18 01:23:45.

YYYYMM e.g. 202610 was converted from 2026-10-18 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...
  • verbose approach: Icon_exclaim.gif IF (0 == 'String') always be true?[30]
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]

  • SELECT DISTINCT column FROM table[31]
  • (1)SELECT * FROM table; (2)Using PHP: array_unique for data handling two or more columns
  • SELECT column FROM table GROUP BY column

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]

  1. ↑ MySQL :: MySQL 5.5 Reference Manual :: 10.6 MySQL Server Time Zone Support
  2. ↑ MySQL :: MySQL 5.1 Reference Manual :: 11.3.1 The DATE, DATETIME, and TIMESTAMP Types
  3. ↑ timezone - How do I get the current time zone of MySQL? - Stack Overflow
  4. ↑ date Man Page - Linux - SS64.com
  5. ↑ date(1): print/set system date/time - Linux man page
  6. ↑ gdate(1) - print or set the system date and time
  7. ↑ JavaScript getTime() Method
  8. ↑ macos - How to have GNU's date in OS X? - Ask Different
  9. ↑ macos - How to get Bash execution time in milliseconds under Mac OS X? - Super User
  10. ↑ timezone - How do I get the current time zone of MySQL? - Stack Overflow
  11. ↑ Excel Timestamp to Date ← Automate Everything
  12. ↑ How to convert date to timestamp in PHP? - Stack Overflow
  13. ↑ Excel date to Unix timestamp - Stack Overflow
  14. ↑ MySQL MONTHNAME() from numbers - Stack Overflow
  15. ↑ PHP convert date format dd/mm/yyyy => yyyy-mm-dd - Stack Overflow
  16. ↑ Getting last month's date in php - Stack Overflow
  17. ↑ php - MySQL first day and last day of current and previous month from date (no timestamp) - Stack Overflow
  18. ↑ Excel formula: Get first day of previous month | Exceljet
  19. ↑ MySQL :: MySQL 5.5 Reference Manual :: 12.7 Date and Time Functions
  20. ↑ How to change Excel date format and create custom formatting
  21. ↑ How to change Excel date format and create custom formatting
  22. ↑ Using the ‘date’ command in your crontab
  23. ↑ How can I have `date` output the time from a different timezone? - Unix & Linux Stack Exchange
  24. ↑ Formula yesterday's date
  25. ↑ Get yesterday's date in bash on Linux, DST-safe - Stack Overflow & unix - Get the date (a day before current time) in Bash - Stack Overflow
  26. ↑ shell - How to get yesterday and day before yesterday in linux? - Stack Overflow
  27. ↑ shell - How to get yesterday and day before yesterday in linux? - Stack Overflow
  28. ↑ sql - MySQL Query GROUP BY day / month / year - Stack Overflow
  29. ↑ mysql - How do I get the first day of the current month? - Stack Overflow
  30. ↑ Why does PHP consider 0 to be equal to a string? - Stack Overflow
  31. ↑ MySQL :: MySQL 5.0 Reference Manual :: 8.3.1.13 DISTINCT Optimization