PHP中的日期和时间
- 格式:ppt
- 大小:86.00 KB
- 文档页数:27
php获取⽇期(今天、昨天、上周、本周、上⽉、本⽉、季度、去年)获取⽇期有很多种写法,“这”只是其中⼀种,欢迎指出错误并补充://今天$today = date("Y-m-d");//昨天$yesterday = date("Y-m-d",strtotime("-1 day"));//上周$lastweek_start = date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1-7,date("Y")));$lastweek_end = date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7-7,date("Y")));//本周$thisweek_start = date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m"),date("d")-date("w")+1,date("Y")));$thisweek_end = date("Y-m-d H:i:s",mktime(23,59,59,date("m"),date("d")-date("w")+7,date("Y")));//上⽉/**不太靠谱,当上个⽉没有当前天的⽇期会出错,⽐如10⽉31⽇时获取上个⽉⽉初和⽉末就会变成10⽉1⽇和10⽉31⽇*同理,+1 moth也是⼀样*/$lastmonth_start = date('Y-m-01', strtotime('-1 month'));$lastmonth_start = date("Y-m-d H:i:s",mktime(0, 0 , 0,date("m")-1,1,date("Y")));// 这个才是王道// 不太靠谱,同上$lastmonth_end = date('Y-m-t', strtotime('-1 month'));$lastmonth_end = date("Y-m-d H:i:s",mktime(23,59,59,date("m") ,0,date("Y"))); // 这个才是王道补充:--------------------突然看到这个也很有意思-----------------------------上个⽉第⼀天:echo date('Y-m-d', strtotime(date('Y-m-01') . ' -1 month')); // 本⽉第⼀天再减⼀个⽉上个⽉最后⼀天:echo date('Y-m-d', strtotime(date('Y-m-01') . ' -1 day')); // 本⽉第⼀天再减⼀天//本⽉$thismonth_start = date("Y-m-01");$thismonth_end = date("Y-m-t");//本季度未最后⼀⽉天数$getMonthDays = date("t",mktime(0, 0 , 0,date('n')+(date('n')-1)%3,1,date("Y")));//本季度/$thisquarter_start = date('Y-m-d H:i:s', mktime(0, 0, 0,date('n')-(date('n')-1)%3,1,date('Y')));$thisquarter_end = date('Y-m-d H:i:s', mktime(23,59,59,date('n')+(date('n')-1)%3,$getMonthDays,date('Y')));// 去年$lastyear_start = date("Y-01-01", strtotime('-1 year'));$lastyear_end = date("Y-12-31", strtotime('-1 year'));//2019-10-10这天 2个⽉后的⽇期date("Y-m-d",strtotime("+2 month",strtotime("2019-10-10")));// 2019-12-10这个正常没问题date("Y-m-d",strtotime("+1 month",strtotime("2019-10-31")));// 2019-12-01这个异常了,为啥呢?因为11⽉份没有31天。
PHP⽇期时间运⽤⼀:⽣⽇倒计时天数的简单实现在我们开发商城类的项⽬时,通常会有类似活动倒计时的需求,那么今天我们不讲那么复杂,我们从最简单的⽣⽇倒计时来学习~假设有这样⼀个问题->“你如何创建⼀个PHP脚本实现计算当天和⽣⽇之间的天数”。
下⾯我们⼀步步来实现:⾸先创建⼀个PHP⽰例⽂件demo.php具体代码如下:1$target_days = mktime(0,0,0,10,29,2021);// 修改⽇期 10/29/202145$today = time();67$diff_days = ($target_days - $today);89$days = (int)($diff_days/86400);1011print "距离下⼀个⽣⽇的天数: $days天!"."12 ";这⾥我定义的⽣⽇时间是2021年10⽉30⽇,那么我们来运⾏⼀下看看:写这篇⽂章的今天是2021年7⽉29⽇,⽽到2021年10⽉30⽇的确是92天!所以搞定啦,⽣⽇倒计时天数就是这么简单~对于上述代码中使⽤到的函数,下⾯我们来讲解⼀下:1、PHP中的mktime()函数可以⽤于返回⼀个⽇期的UNIX时间戳,语法是“mktime(hour,minute,second,month,day,year,is_dst);”,其中参数分别表⽰时、分、秒、⽉、天、年,is_dst参数则表⽰如果时间在夏令时期间,则设置为 1,否则设置为 0,若未知则设置为 -1(默认)。
如果未知,PHP 会试图找到⾃⼰(可能产⽣意外的结果)。
注意:该参数在 PHP 5.1.0 中被废弃。
取⽽代之使⽤的是新的时区处理特性。
2、time()函数则⽤于返回⾃ Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数。
以上就是PHP⽇期时间运⽤⼀:⽣⽇倒计时天数的简单实现的详细内容。
PHP,Mysql日期和时间整理工作一年,收获了很多,慢慢做些总结,提升工作效率,工作中mysql使用的时间是一个UNIX时间戳:从1970年1月1日0点开始到当前时间的秒数,由于是int类型,很方便的适用于计算机处理,不仅仅是php和mysql的数据交互的一种格式,在各种客户端,也是数据交互的标准(android/IOS)等,因此如果只是保存和显示日期的时候,应该使用UNIX时间戳来计算日期和做为标准的日期格式。
工作中常用的流程是:将HTML页面的时间转化为时间戳保存到mysql中,从mysql中取出时间戳格式化展示在web或手机客户端。
总之mysql中保存的时间是UNIX时间戳,然后被PHP格式化为合适的时间介绍几个常用的函数1.date(),2.mktime(),3.getdate(),4.strftime()1.date()PHP中获取时间和日期使用date()函数:将时间戳或当前时间转化成格式化的字符串,例如:echo date('Y-i-s');//输出2014-3-252.mktime()使用mktime()将时间转化成UNIX时间戳$timestamp = mktime();获取当前时间戳有三种方法:mktime(),time(),date('U')mktime做时间运算mktime(12,0,0,$mon,$day+10,$year);十天以后的时间戳3.getdate()函数:$today = getdate();print_r($today);//输出Array([seconds] => 38[minutes] => 38[hours] => 22[mday] => 25[wday] => 2[mon] => 3[year] => 2014[yday] => 83[weekday] => Tuesday[month] => March[0] => 1395758318)使用checkdate()函数检验日期有效性4.strftime()格式化时间戳mysql格式化时间1.DATE_FORMAT()2.UNIX_TIMESTAMP()返回格式化成UNIX时间戳的日期,例如:SELECT UNIX_TIMESTAMP(date) FROM table,这样就可以在PHP中处理了PHP中格式化时间的函数比较少,介绍几个常用的格式化时间函数?1234567891011121314151617181920212223242526272829/**?*将timestamp时间转化为x时x分x秒?*?*/public static function getTimeLong($seconds) { ????if (!$seconds) {????????return '0秒';????}????$ret = '';????if ($seconds >= 3600) {????????$hours = (int)($seconds / 3600); ????????$seconds = $seconds % 3600; ????????if ($hours) {????????????$ret .= ($hours . '时'); ????????}????}????if ($seconds >= 60) {????????$mi = (int)($seconds / 60); ????????$seconds = $seconds % 60; ????????if ($mi) {????????????$ret .= ($mi . '分'); ????????}????}????if ($seconds) {????????$ret .= ($seconds . '秒');????}????return $ret;}?1234567891011121315161718192021222324/**?* 将相差timestamp转为如“1分钟前”,“3天前”等形式?*?* @param timestamp $ts_diff 当前时间 - 要格式化的timestamp ?*/public static function formatTime($ts_diff){????if ($ts_diff <=0)????{????????return date('Y-m-d');????}????else if ( $ts_diff <= 3600 )????{????????return max(1, (int)($ts_diff/60)) . '分钟前'; ????}????else if ( $ts_diff <= 86400 )????{????????return ((int)($ts_diff/3600)) . '小时前';????}????else????{????????return ((int)($ts_diff/86400)) . '天前';????}}?12345679101112131415161718192021222324/** 将数字星期转换成字符串星期 weekNum2String($num) ?* @param int?* @return string?*/public static function weekNum2String($num){ ????switch($num){????????case 1:????????????return '星期一';????????case 2:????????????return '星期二';????????case 3:????????????return '星期三';????????case 4:????????????return '星期四';????????case 5:????????????return '星期五';????????case 6:????????????return '星期六';????????case 7:????????????return '星期日';????????default:????????????return '未知';????}}。
PHP获取当前日期和时间及格式化方法参数PHP获取当前日期和时间及格式化方法参数这篇文章主要介绍了PHP获取当前日期和时间及格式化方法参数,本文先是讲解了获取当前日期时间的方法,其后总结了格式化参数,需要的朋友可以参考下.使用函式 date() 实现复制代码代码如下:<?php echo $showtime=date("Y-m-d H:i:s");?>显示的格式: 年-月-日小时:分钟:秒相关时间参数:a - "am" 或是 "pm"A - "AM" 或是 "PM"d - 几日,二位数字,若不足二位则前面补零; 如: "01" 至 "31"D - 星期几,三个英文字母; 如: "Fri"F - 月份,英文全名; 如: "January"h - 12 小时制的小时; 如: "01" 至 "12"H - 24 小时制的小时; 如: "00" 至 "23"g - 12 小时制的小时,不足二位不补零; 如: "1" 至 12"G - 24 小时制的小时,不足二位不补零; 如: "0" 至 "23"i - 分钟; 如: "00" 至 "59"j - 几日,二位数字,若不足二位不补零; 如: "1" 至 "31"l - 星期几,英文全名; 如: "Friday"m - 月份,二位数字,若不足二位则在前面补零; 如: "01" 至 "12"n - 月份,二位数字,若不足二位则不补零; 如: "1" 至 "12"M - 月份,三个英文字母; 如: "Jan"s - 秒; 如: "00" 至 "59"S - 字尾加英文序数,二个英文字母; 如: "th","nd"t - 指定月份的.天数; 如: "28" 至 "31"U - 总秒数w - 数字型的星期几,如: "0" (星期日) 至 "6" (星期六) Y - 年,四位数字; 如: "1999"y - 年,二位数字; 如: "99"z - 一年中的第几天; 如: "0" 至 "365"【PHP获取当前日期和时间及格式化方法参数】。
thinkphp关于时间的查询方法在ThinkPHP框架中,可以使用日期和时间函数来执行与时间相关的查询。
以下是一些常用的时间查询方法:1. 获取当前时间:```php$current_time = time(); // 返回当前时间戳```2. 格式化时间:```php$timestamp = time();$formatted_time = date('Y-m-d H:i:s', $timestamp); // 将时间戳格式化为日期时间字符串,例如 " 12:34:56"```3. 查询特定时间范围内的数据:假设你有一个名为`users`的表,其中包含`create_time`字段表示用户创建时间,可以使用以下方法查询某个时间范围内的用户:```php// 查询创建时间在指定日期范围内的用户$start_time = strtotime('');$end_time = strtotime('');$users = Db::name('users')->where('create_time', '>=', $start_time)->where('create_time', '<=', $end_time)->select();```4. 查询特定日期的数据:使用`strtotime`函数将日期字符串转换为时间戳,然后使用`where`方法进行查询。
例如,查询创建时间为指定日期的用户:```php$date = '';$timestamp = strtotime($date);$users = Db::name('users')->where('create_time', '=', $timestamp)->select();```5. 查询今天之前或之后的数据:使用`today`函数获取当前日期,然后使用`where`方法进行查询。
PHP中⽐较两个时间的⼤⼩与⽇期的差值在这⾥我们全⽤到时间戳mktime(hour,minute,second,month,day,year,[is_dst])其参数可以从右向左省略,任何省略的参数都会被设置成本地⽇期和时间的当前值。
参数描述hour 可选。
规定⼩时。
minute 可选。
规定分钟。
second 可选。
规定秒。
month 可选。
规定⽤数字表⽰的⽉。
day 可选。
规定天。
year 可选。
规定年。
在某些系统上,合法值介于 1901 – 2038 之间。
不过在 php教程 5 中已经不存在这个限制了。
is_dst 可选。
如果时间在⽇光节约时间(dst)期间,则设置为1,否则设置为0,若未知,则设置为-1。
⾃ 5.1.0 起,is_dst 参数被废弃。
因此应该使⽤新的时区处理特性在⽇常⽣活中我们要经常⽐较时间的早晚,对于我们来说判断时间的⼤⼩很简单。
但是时间的⽐较不只是单纯的数字⼤⼩的⽐较,因此相对来说还是⽐较复杂。
那么在php中通过什么⽅式来⽐较两个时间的⼤⼩呢?要⽐较两个时间的⼤⼩,我们需要将时间转化为时间戳格式,然后再进⾏⽐较这是最常⽤的⽅法。
常⽤到的函数是:strtotime()语法格式:strtotime(time,now)如果time是绝对时间,则now参数不起作⽤如果time是相对时间,则相对应的参数则对应函数就是now来提供,如果没有提供now参数,那么相对应的时间就是当前的本地时间。
实例:⽐较两个绝对时间的⼤⼩代码:<?php$zero1=date(“y-m-d h:i:s”);$zero2=”2010-11-29 21:07:00′;echo “zero1的时间为:”.$zero1.”<br>”;echo “zero2的时间为:”.$zero2.”<br>”;if(strtotime($zero1)<strtotime($zero2)){echo “zero1早于zero2′;}else{echo “zero2早于zero1′;}?>输出结果:zero1的时间为:2010-11-30 21:12:55zero2的时间为:2010-11-29 21:07:00zero2早于zero1注:可以根据实例发散思维计算两个⽇期的差值奥运会倒计时,亚运会倒计时,⽣⽇倒计时这些倒计时都可以通过计算两个⽇期的差值来实现,同样需要⽤到strottime()函数。
php modify 方法在PHP中,可以使用`modify`方法来修改日期和时间的值。
`modify`方法接收一个字符串参数,其中包含要修改的日期和时间的指令。
下面是一些常用的指令示例:1. 增加或减少时间:- "+1 day":增加一天- "-1 week":减少一周- "+2 hours":增加两小时- "-30 minutes":减少30分钟2. 设置特定的日期和时间:- "next Monday":设置为下一个周一- "last day of this month":设置为本月的最后一天- "first day of next month":设置为下一个月的第一天以下是使用`modify`方法的示例代码:```php$date = new DateTime("2021-10-01");$date->modify("+1 week");echo $date->format("Y-m-d"); // 输出:2021-10-08$date->modify("next Monday");echo $date->format("Y-m-d"); // 输出:2021-10-11$date->modify("-3 days");echo $date->format("Y-m-d"); // 输出:2021-10-08```在上述示例中,首先创建了一个`DateTime`对象,并将日期设置为2021年10月1日。
然后使用`modify`方法来增加一周、设置为下一个周一和减少3天,分别输出了修改后的日期。
一、概述在网页开发中,经常需要对用户输入的时间进行验证,以确保输入的时间格式正确。
而正则表达式是一种强大的工具,可以用来匹配和验证字符串,因此在验证时间格式时,可以使用正则表达式来实现。
本文将介绍如何使用PHP来验证时间格式的正则表达式。
二、时间格式的常见形式在验证时间格式之前,首先需要了解时间的常见形式。
在不同的国家和地区,时间的表达方式可能有所不同,但在国际标准ISO 8601中,时间的常见形式包括以下几种:1. 完整日期和时间:YYYY-MM-DDTHH:MM:SS(例如:2022-01-01T12:00:00)2. 年月日:YYYY-MM-DD(例如:2022-01-01)3. 时分秒:HH:MM:SS(例如:12:00:00)4. 时分:HH:MM(例如:12:00)三、使用PHP验证时间格式的正则表达式在PHP中,可以通过preg_match函数来使用正则表达式进行匹配和验证。
下面是一些常见的时间格式的正则表达式示例:1. 完整日期和时间的正则表达式:```php$pattern = '/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})$/';```2. 年月日的正则表达式:```php$pattern = '/^(\d{4})-(\d{2})-(\d{2})$/';```3. 时分秒的正则表达式:```php$pattern = '/^(\d{2}):(\d{2}):(\d{2})$/';```4. 时分的正则表达式:```php$pattern = '/^(\d{2}):(\d{2})$/';```四、示例下面通过一个具体的示例来演示如何使用PHP验证时间格式的正则表达式。
```php$time = "2022-01-01T12:00:00";$pattern = '/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})$/';if (preg_match($pattern, $time)) {echo "时间格式正确";} else {echo "时间格式不正确";}```五、注意事项在使用正则表达式验证时间格式时,需要注意以下几点:1. 正则表达式中的^表示匹配字符串的开头,$表示匹配字符串的结尾,以确保匹配的字符串是完整的时间格式。
PHP时间⽇期增减操作⽰例【datestrtotime实现加⼀天、加⼀⽉等操作】本⽂实例讲述了PHP时间⽇期增减操作。
分享给⼤家供⼤家参考,具体如下:时间函数是PHP⾥⾯的⽇常函数,时间的默认时期,今天、昨天、明天、上⼀周、下⼀周,本周开始时间和结束时间;本⽉开始时间结束时间;上⽉开始时间结束时间,指定⽇期的周⼀和周⽇等等⽅法。
date_default_timezone_set('PRC'); //默认时区//当前的时间增加5天$date1 = "2018-12-21";echo date('Y-m-d',strtotime("$date1 +5 day")); //输出结果:2018-12-26//相应地,要增加⽉,年,将day改成month或year即可//+++ 今天、昨天、明天、上⼀周、下⼀周 +++++++++echo "今天:",date("Y-m-d",time()),"<hr>";echo "昨天:",date("Y-m-d",strtotime("-1 day")), "<hr>";echo "明天:",date("Y-m-d",strtotime("+1 day")), "<hr>";echo "⼀周后:",date("Y-m-d",strtotime("+1 week")), "<hr>";echo "⼀周零两天四⼩时两秒后:",date("Y-m-d G:H:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "<hr>";echo "下个星期四:",date("Y-m-d",strtotime("next Thursday")), "<hr>";echo "上个周⼀:".date("Y-m-d",strtotime("last Monday"))."<hr>";echo "⼀个⽉前:".date("Y-m-d",strtotime("last month"))."<hr>";echo "⼀个⽉后:".date("Y-m-d",strtotime("+1 month"))."<hr>";echo "⼗年后:".date("Y-m-d",strtotime("+10 year"))."<hr>";运⾏结果:2018-12-26今天:2018-12-21--------------------------------------------------------------------------------昨天:2018-12-20--------------------------------------------------------------------------------明天:2018-12-22--------------------------------------------------------------------------------⼀周后:2018-12-28--------------------------------------------------------------------------------⼀周零两天四⼩时两秒后:2018-12-30 15:15:46--------------------------------------------------------------------------------下个星期四:2018-12-27--------------------------------------------------------------------------------上个周⼀:2018-12-17--------------------------------------------------------------------------------⼀个⽉前:2018-11-21--------------------------------------------------------------------------------⼀个⽉后:2019-01-21--------------------------------------------------------------------------------⼗年后:2028-12-21--------------------------------------------------------------------------------php 本周开始时间和结束时间;本⽉开始时间结束时间;上⽉开始时间结束时间date_default_timezone_set('PRC'); //默认时区/*** 功能:取得给定⽇期所在周的开始⽇期和结束⽇期* 参数:$gdate ⽇期,默认为当天,格式:YYYY-MM-DD* $first ⼀周以星期⼀还是星期天开始,0为星期天,1为星期⼀* 返回:数组array("开始⽇期", "结束⽇期");**/function aweek($gdate = "", $first = 0){if(!$gdate) $gdate = date("Y-m-d");$w = date("w", strtotime($gdate));//取得⼀周的第⼏天,星期天开始0-6$dn = $w ? $w - $first : 6;//要减去的天数//本周开始⽇期$st = date("Y-m-d", strtotime("$gdate -".$dn." days"));//本周结束⽇期$en = date("Y-m-d", strtotime("$st +6 days"));//上周开始⽇期$last_st = date('Y-m-d',strtotime("$st - 7 days"));//上周结束⽇期$last_en = date('Y-m-d',strtotime("$st - 1 days"));return array($st, $en,$last_st,$last_en);//返回开始和结束⽇期}echo implode("|", aweek("", 1)).'<br />';//echo date("Y-m-d",strtotime("time()"));echo '本周第⼀天(星期⽇为⼀周开始):'.date('Y-m-d', time()-86400*date('w')).'<hr>';echo '本周第⼀天(星期⼀为⼀周开始):'.date('Y-m-d', time()-86400*date('w')+(date('w')>0?86400:-6*86400)).'<hr>'; echo '本⽉第⼀天:'.date('Y-m-d', mktime(0,0,0,date('m'),1,date('Y'))).'<hr>';echo '本⽉最后⼀天:'.date('Y-m-d', mktime(0,0,0,date('m'),date('t'),date('Y'))).'<hr>';//上个⽉的开始⽇期$m = date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y')));//上个⽉共多少天$t = date('t',strtotime("$m"));echo '上⽉第⼀天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,1,date('Y'))).'<hr>';echo '上⽉最后⼀天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,$t,date('Y'))).'<hr>';运⾏结果:2018-12-17|2018-12-23|2018-12-10|2018-12-16本周第⼀天(星期⽇为⼀周开始):2018-12-16--------------------------------------------------------------------------------本周第⼀天(星期⼀为⼀周开始):2018-12-17--------------------------------------------------------------------------------本⽉第⼀天:2018-12-01--------------------------------------------------------------------------------本⽉最后⼀天:2018-12-31--------------------------------------------------------------------------------上⽉第⼀天:2018-11-01--------------------------------------------------------------------------------上⽉最后⼀天:2018-11-30--------------------------------------------------------------------------------//PHP⼿册上有⼀个这个⽅法,⽤来返回指定⽇期的周⼀和周⽇function get_week_range($week, $year){$timestamp = mktime(1,0,0,1,1,$year);$firstday = date("N",$timestamp);if($firstday >4){$firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);}else{$firstweek = strtotime('-'.($firstday-1).' days', $timestamp);}$monday = strtotime('+'.($week - 1).' week', $firstweek);$sunday = strtotime('+6 days', $monday);$start = date("Y-m-d", $monday);$end = date("Y-m-d", $sunday);return array($start, $end);}//strtotime获取本周第⼀天和最后⼀天⽅法的BUG//PHP⼿册上有⼀个这个⽅法,⽤来返回指定⽇期的周⼀和周⽇function get_week_range2($week, $year){$timestamp = mktime(1,0,0,1,1,$year);$firstday = date("N",$timestamp);if($firstday >4){$firstweek = strtotime('+'.(8-$firstday).' days', $timestamp);}else{$firstweek = strtotime('-'.($firstday-1).' days', $timestamp);}$monday = strtotime('+'.($week - 1).' week', $firstweek);$sunday = strtotime('+6 days', $monday);$start = date("Y-m-d", $monday);$end = date("Y-m-d", $sunday);return array($start, $end);}但在跨年的时候使⽤会有问题例如2011年的12⽉31⽇周六和2012年1⽉1⽇周⽇,拿到的周⼀和周⽇完全不同2011年12⽉31⽇拿合到的周⼀和周⽇分别对应2011-12-262012-01-01但2012年1⽉1⽇拿到的周⼀和周⽇分别对应2012-01-022012-01-04原因为传进去的⽅法的周为第53周,但是年为2011年,所以认为2011的第53周,所以计算有误,解决⽅法为,如果周为⼤于10(因为⼀⽉个⽉不可能有10周),且⽉份为1的时候,将年减1处理if(date('m',$last_week_time) == '01' and $tmp_last_week > 10){$last_week_year--;}PS:这⾥再为⼤家推荐⼏款时间及⽇期相关⼯具供⼤家参考:更多关于PHP相关内容感兴趣的读者可查看本站专题:《》、《》、《》、《》、《》、《》、《》及《》希望本⽂所述对⼤家PHP程序设计有所帮助。