PHP+MYSQL网站开发中关于时刻的问题-Php-优质IT资源分享社区

admin
管理员
管理员
  • UID1
  • 粉丝29
  • 关注4
  • 发帖数581
  • 社区居民
  • 忠实会员
  • 原创写手
阅读:207回复:0

  PHP+MYSQL网站开发中关于时刻的问题

楼主#
更多 发布于:2016-05-31 16:48

PHP+MYSQL网站开发中关于时刻的问题,看看当遇到时刻的问题时,该怎么处理呢?

PHP+MYSQL网站开发中关于时刻的问题,看看当遇到时刻的问题时,该怎么处理呢?

PHP和MYSQL中没有像ASP和MSSQL那样有DateDiff这个函数直接对比,MYSQL5.0现已支撑DateDiff了,可是4.x还不支撑。。。

下面别离来看PHP和MYSQL查询时怎么对比。。。

先看PHP:

$date1 = '2008-05-30';

$date2 = '2008-06-05';

$from =

mktime(0,0,0,date("m",strtotime($date1)),date("d",strtotime($date1)),date("Y",strtotime($date1)));

$to =

mktime(0,0,0,date("m",strtotime($date2)),date("d",strtotime($date2)),date("Y",strtotime($date2)));

$datediff = ($to - $from)/86400;

echo $datediff;

回来值:6

MYSQL就简略地写一条SQL句子就清楚了:

select * from tb where

(TO_DAYS(expiredDate)-TO_DAYS(NOW()))<=3 。。。

5.0以上的MYSQL就直接DateDiff了。。。

以下是或人总结的:

30天以内:

mysql> SELECT something FROM table WHERE

TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;

DAYOFWEEK(date)

回来日期date的星期索引(1=星期天,2=星期一,

……7=星期六)。这些索引值对应于ODBC规范。

mysql> select DAYOFWEEK('1998-02-03');

-> 3

WEEKDAY(date)

回来date的星期索引(0=星期一,1=星期二, ……6= 星期天)。

mysql> select WEEKDAY('1997-10-04

22:23:00');

-> 5

mysql> select WEEKDAY('1997-11-05');

-> 2

DAYOFMONTH(date)

回来date的月份中日期,在1到31规模内。

mysql> select DAYOFMONTH('1998-02-03');

-> 3

DAYOFYEAR(date)

回来date在一年中的日数, 在1到366规模内。

mysql> select DAYOFYEAR('1998-02-03');

-> 34

MONTH(date)

回来date的月份,规模1到12。

mysql> select MONTH('1998-02-03');

-> 2

DAYNAME(date)

回来date的星期姓名。

mysql> select DAYNAME("1998-02-05");

-> 'Thursday'

MONTHNAME(date)

回来date的月份姓名。

mysql> select MONTHNAME("1998-02-05");

-> 'February'

QUARTER(date)

回来date一年中的季度,规模1到4。

mysql> select QUARTER('98-04-01');

-> 2

WEEK(date)

WEEK(date,first)

关于星期天是一星期的第一天的当地,有一个单个参数,回来date的周数,规模在0到52。2个参数方法WEEK()答应你指定星期是不是开端于星期天或星期一。假如第二个参数是0,星期从星期天开端,假如第二个参数是1,

从星期一开端。

mysql> select WEEK('1998-02-20');

-> 7

mysql> select WEEK('1998-02-20',0);

-> 7

mysql> select WEEK('1998-02-20',1);

-> 8

YEAR(date)

回来date的年份,规模在1000到9999。

mysql> select YEAR('98-02-03');

-> 1998

HOUR(time)

回来time的小时,规模是0到23。

mysql> select HOUR('10:05:03');

-> 10

MINUTE(time)

回来time的分钟,规模是0到59。

mysql> select MINUTE('98-02-03 10:05:03');

-> 5

SECOND(time)

回来time的秒数,规模是0到59。

mysql> select SECOND('10:05:03');

-> 3

PERIOD_ADD(P,N)

添加N个月到期间P(以格局YYMM或YYYYMM)。以格局YYYYMM回来值。留意期间参数P不是日期值。

mysql> select PERIOD_ADD(9801,2);

-> 199803

PERIOD_DIFF(P1,P2)

回来在期间P1和P2之间月数,P1和P2应当以格局YYMM或YYYYMM。留意,期间参数P1和P2不是日期值。

mysql> select PERIOD_DIFF(9802,199703);

-> 11

DATE_ADD(date,INTERVAL expr type)

DATE_SUB(date,INTERVAL expr type)

ADDDATE(date,INTERVAL expr type)

SUBDATE(date,INTERVAL expr type)

这些功用履行日期运算。关于MySQL

3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的近义词。

在MySQL

3.23中,你能够运用+和-而不是DATE_ADD()和DATE_SUB()。(见比如)date是一个指定开端日期的DATETIME或DATE值,expr是指定加到开端日期或从开端日期减去的距离值一个表达式,expr是一个字符串;它能够以一个“-”开端表明负距离。type是一个关键字,指明表达式应当怎么被解说。EXTRACT(type

FROM date)函数从日期中回来“type”距离。下表显现了type和expr参数如何被相关: type值 含义 期望的expr格局

SECOND 秒 SECONDS

MINUTE 分钟 MINUTES

HOUR 时刻 HOURS

DAY 天 DAYS

MONTH 月 MONTHS

YEAR 年 YEARS

MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"

HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"

DAY_HOUR 天和小时 "DAYS HOURS"

YEAR_MONTH 年和月 "YEARS-MONTHS"

HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"

DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"

DAY_SECOND 天, 小时, 分钟, 秒 "DAYS

HOURS:MINUTES:SECONDS"

MySQL在expr格局中答应任何标点分隔符。表明显现的是主张的分隔符。假如date参数是一个DATE值而且你的核算仅仅包括YEAR、MONTH和DAY有些(即,没有时刻有些),成果是一个DATE值。不然成果是一个DATETIME值。

mysql> SELECT "1997-12-31 23:59:59" + INTERVAL

1 SECOND;

-> 1998-01-01 00:00:00

mysql> SELECT INTERVAL 1 DAY +

"1997-12-31";

-> 1998-01-01

mysql> SELECT "1998-01-01" - INTERVAL 1

SECOND;

-> 1997-12-31 23:59:59

mysql> SELECT DATE_ADD("1997-12-31

23:59:59",

INTERVAL 1 SECOND);

-> 1998-01-01 00:00:00

mysql> SELECT DATE_ADD("1997-12-31

23:59:59",

INTERVAL 1 DAY);

-> 1998-01-01 23:59:59

mysql> SELECT DATE_ADD("1997-12-31

23:59:59",

INTERVAL "1:1" MINUTE_SECOND);

-> 1998-01-01 00:01:00

mysql> SELECT DATE_SUB("1998-01-01

00:00:00",

INTERVAL "1 1:1:1" DAY_SECOND);

-> 1997-12-30 22:58:59

mysql> SELECT DATE_ADD("1998-01-01

00:00:00",

INTERVAL "-1 10" DAY_HOUR);

-> 1997-12-30 14:00:00

mysql> SELECT DATE_SUB("1998-01-02", INTERVAL

31 DAY);

-> 1997-12-02

mysql> SELECT EXTRACT(YEAR FROM

"1999-07-02");

-> 1999

mysql> SELECT EXTRACT(YEAR_MONTH FROM

"1999-07-02 01:02:03");

-> 199907

mysql> SELECT EXTRACT(DAY_MINUTE FROM

"1999-07-02 01:02:03");

-> 20102

假如你指定太短的距离值(不包括type关键字期望的距离有些),MySQL假定你省掉了距离值的最左面有些。

假如你指定一个type是DAY_SECOND,值expr被期望有天、小时、分钟和秒有些。假如你象"1:10"这样指定值,MySQL假定日子和小时有些是丢掉的而且值代表分钟和秒。换句话说,"1:10"

DAY_SECOND以它等价于"1:10" MINUTE_SECOND

的方法解说,这对那MySQL解说TIME值表明通过的时刻而非作为一天的时刻的方法有二义性。假如你运用的确不正确的日期,成果是NULL。假如你添加MONTH、YEAR_MONTH或YEAR而且成果日期大于新月份的最大值天数,日子在新月用最大的天调整。

mysql> select DATE_ADD('1998-01-30', Interval 1

month);

-> 1998-02-28

留意,早年面的比如中词INTERVAL和type关键字不是区别大小写的。

TO_DAYS(date)

给出一个日期date,回来一个天数(从0年的天数)。

mysql> select TO_DAYS(950501);

-> 728779

mysql> select TO_DAYS('1997-10-07');

-> 729669

TO_DAYS()不计划用于运用格列高里历(1582)呈现前的值。

FROM_DAYS(N)

给出一个天数N,回来一个DATE值。

mysql> select FROM_DAYS(729669);

-> '1997-10-07'

TO_DAYS()不计划用于运用格列高里历(1582)呈现前的值。

DATE_FORMAT(date,format)

依据format字符串格局化date值。下列修饰符能够被用在format字符串中:

%M 月姓名(January……December)

%W 星期姓名(Sunday……Saturday)

%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)

%Y 年, 数字, 4 位

%y 年, 数字, 2 位

%a 缩写的星期姓名(Sun……Sat)

%d 月份中的天数, 数字(00……31)

%e 月份中的天数, 数字(0……31)

%m 月, 数字(01……12)

%c 月, 数字(1……12)

%b 缩写的月份姓名(Jan……Dec)

%j 一年中的天数(001……366)

%H 小时(00……23)

%k 小时(0……23)

%h 小时(01……12)

%I 小时(01……12)

%l 小时(1……12)

%i 分钟, 数字(00……59)

%r 时刻,12 小时(hh:mm:ss [AP]M)

%T 时刻,24 小时(hh:mm:ss)

%S 秒(00……59)

%s 秒(00……59)

%p AM或PM

%w 一个星期中的天数(0=Sunday ……6=Saturday )

%U 星期(0……52), 这儿星期天是星期的第一天

%u 星期(0……52), 这儿星期一是星期的第一天

%% 一个文字“%”。

一切的别的字符不做解说被复制到成果中。

mysql> select DATE_FORMAT('1997-10-04

22:23:00', '%W %M %Y');

-> 'Saturday October 1997'

mysql> select DATE_FORMAT('1997-10-04

22:23:00', '%H:%i:%s');

-> '22:23:00'

mysql> select DATE_FORMAT('1997-10-04

22:23:00',

'%D %y %a %d %m %b %j');

-> '4th 97 Sat 04 10 Oct 277'

mysql> select DATE_FORMAT('1997-10-04

22:23:00',

'%H %k %I %r %T %S %w');

-> '22 22 10 10:23:00 PM 22:23:00 00 6'

MySQL3.23中,在格局修饰符字符前需要%。在MySQL更早的版别中,%是可选的。

TIME_FORMAT(time,format)

这象上面的DATE_FORMAT()函数相同运用,可是format字符串只能包括处理小时、分钟和秒的那些格局修饰符。别的修饰符发生一个NULL值或0。

CURDATE()

CURRENT_DATE

以'YYYY-MM-DD'或YYYYMMDD格局回来今日日期值,取决于函数是在一个字符串仍是数字上下文被运用。

mysql> select CURDATE();

-> '1997-12-15'

mysql> select CURDATE() + 0;

-> 19971215

CURTIME()

CURRENT_TIME

以'HH:MM:SS'或HHMMSS格局回来当时时刻值,取决于函数是在一个字符串仍是在数字的上下文被运用。

mysql> select CURTIME();

-> '23:50:26'

mysql> select CURTIME() + 0;

-> 235026

NOW()

SYSDATE()

CURRENT_TIMESTAMP

以'YYYY-MM-DD

HH:MM:SS'或YYYYMMDDHHMMSS格局回来当时的日期和时刻,取决于函数是在一个字符串仍是在数字的

上下文被运用。

mysql> select NOW();

-> '1997-12-15 23:50:26'

mysql> select NOW() + 0;

-> 19971215235026

UNIX_TIMESTAMP()

UNIX_TIMESTAMP(date)

假如没有参数调用,回来一个Unix时刻戳记(从'1970-01-01

00:00:00'GMT开端的秒数)。假如UNIX_TIMESTAMP()用一

个date参数被调用,它回来从'1970-01-01 00:00:00'

GMT开端的秒数值。date能够是一个DATE字符串、一个DATETIME

字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格局的本地时刻的一个数字。

mysql> select UNIX_TIMESTAMP();

-> 882226357

mysql> select UNIX_TIMESTAMP('1997-10-04

22:23:00');

-> 875996580

当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接承受值,没有隐含的“string-to-unix-timestamp”改换。

FROM_UNIXTIME(unix_timestamp)

以'YYYY-MM-DD

HH:MM:SS'或YYYYMMDDHHMMSS格局回来unix_timestamp参数所表明的值,取决于函数是在一个字符串

仍是或数字上下文中被运用。

mysql> select FROM_UNIXTIME(875996580);

-> '1997-10-04 22:23:00'

mysql> select FROM_UNIXTIME(875996580) + 0;

-> 19971004222300

FROM_UNIXTIME(unix_timestamp,format)

回来表明 Unix

时刻标记的一个字符串,依据format字符串格局化。format能够包括与DATE_FORMAT()函数列出的条

目相同的修饰符。

mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),

'%Y %D %M %h:%i:%s %x');

-> '1997 23rd December 03:43:30 x'

SEC_TO_TIME(seconds)

回来seconds参数,改换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格局化,取决于函数是在一个字符串仍是在数字

上下文中被运用。

mysql> select SEC_TO_TIME(2378);

-> '00:39:38'

mysql> select SEC_TO_TIME(2378) + 0;

-> 3938

TIME_TO_SEC(time)

回来time参数,转换成秒。

mysql> select TIME_TO_SEC('22:23:00');

-> 80580

mysql> select TIME_TO_SEC('00:39:38');

-> 2378

优质IT资源分享社区为你提供此文。

本站有大量优质php教程视频,资料等资源,包含php基础教程,高级进阶教程等等,教程视频资源涵盖传智播客,极客学院,达内,北大青鸟,猎豹网校等等IT职业培训机构的培训教学视频,价值巨大。欢迎点击下方链接查看

php教程视频

优质IT资源分享社区(www.itziyuan.top)
一个免费,自由,开放,共享,平等,互助的优质IT资源分享网站。
专注免费分享各大IT培训机构最新培训教学视频,为你的IT学习助力!

!!!回帖受限制请看点击这里!!!
!!!资源失效请在此版块发帖说明!!!

[PS:按 CTRL+D收藏本站网址~]

——“优质IT资源分享社区”管理员专用签名~

本版相似帖子

游客