<?php
/**
* 功能:取得给定日期所在周的开始日期和结束日期
* 参数:$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')).'<br/>';
echo '本周第一天(星期一为一周开始):'.date('Y-m-d', time()-86400*date('w')+(date('w')>0?86400:-6*86400)).'<br/>';
echo '本月第一天:'.date('Y-m-d', mktime(0,0,0,date('m'),1,date('Y'))).'<br/>';
echo '本月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m'),date('t'),date('Y'))).'<br/>';
//上个月的开始日期
$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'))).'<br/>';
echo '上月最后一天:'.date('Y-m-d', mktime(0,0,0,date('m')-1,$t,date('Y'))).'<br/>';
?>
PHP手册上有一个这个方法,用来返回指定日期的周一和周日
<?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手册上有一个这个方法,用来返回指定日期的周一和周日
<?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);
}
?>
但在跨年的时候使用会有问题
例如2009年的12月31日周四和2010年1月1日周五周拿到的周一和周日完全不同
2009年12月31日拿合到的周一和周日分别对应
2009-12-28
2010-01-03
但2010年1月1日拿 到的周一和周日分别对应
2011-01-03
2011-01-09
原因为传进去的方法的周为第53周,但是年为2010年,所以认为2010的第53周,所以计算有误,解决方法为,如果周为大于10(因为一月个月不可能有10周),且月份为1的时候,将年减1处理
if(date('m',$last_week_time) == '01' and $tmp_last_week > 10)
{
$last_week_year--;
}
分享到:
相关推荐
java获取本月的开始时间\结束时间、获取上月的开始时间\结束时间、获取本年的开始时间\结束时间、获取某个日期的开始时间\结束时间、获取今年是哪一年、获取本月是哪一月
--返回开始时间和结束时间 格式:dbo.GetDateStartFirstAndLast(type,datetype,datetime,time) Type 日期类型:(“-”为前一期间,无符号为当期,“+”为后一期间),Y 年,Q 季,M 月,W 周,D 日 例:前一年:-Y...
在PHP编程中,获取特定时间范围的日期是常见的需求,比如获取本周、上周、本月、上月以及本季度的日期范围。这些功能可以帮助开发者在处理数据统计、报表生成或者时间相关的业务逻辑时更加便捷。下面将详细介绍如何...
在PHP编程中,有时我们需要获取特定时间范围,例如一周的开始日期和结束日期。这在处理数据统计、日程安排或者报表生成等场景非常常见。本文将详细讲解如何使用PHP来获取当前或任意日期对应的本周开始日期和结束日期...
在JavaScript中,获取特定时间范围(如本周、上周、本月、上月、本季度、上季度)的开始和结束日期是常见的需求。以下是一个详细解释这些功能的实现方法: 首先,我们创建一个`Date`对象`now`来获取当前日期和时间...
假设一周从周一开始,可以通过以下代码获取本周的起始(周一)和结束(周日)日期: ```csharp DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek)); DateTime endWeek = startWeek.AddDays(6); `...
java获取今天、昨天、近一周、近两周、近三周、近一月、近两月、近三月、近半年、本周、上周、本月、上月时间段
1. 日期和时间的表示:在Java中,日期和时间可以用java.util.Date类和java.util.Calendar类来表示。Date类表示一个特定的瞬间,Calendar类则提供了更多的日期和时间操作。 2. 日期和时间的操作:在代码中,我们可以...
在JavaScript编程中,获取特定时间范围的日期是一个常见的需求,比如获取今天、昨天、本周、上周、本月和上月的时间。以下将详细解释如何通过JavaScript实现这些功能。 1. 获取今天: ```javascript var nowDate = ...
本篇文章将详细讲解如何使用Python获取本周、上周、本月、上月以及本季的时间范围,这对于处理与时间相关的问题非常有用。 首先,我们需要导入Python的`datetime`模块,它是处理日期和时间的核心模块。在示例代码中...
5. **获取上月的开始时间和结束时间** 减去1个月得到上个月的日期,然后转换为字符串格式,再转换回日期,并添加时间部分(因为默认只返回日期): ``` SELECT TO_CHAR(TO_DATE(TO_CHAR(ADD_MONTHS(SYSDATE, -1),...
在PHP编程中,有时我们需要获取特定月份的月初和月末时间戳,这在处理与时间相关的数据分析、统计或者日志记录时非常有用。本篇将详细解释如何使用PHP获取当前月和上个月的月初及月末时间戳,并探讨相关的时间处理...
然后,对于获取本周的开始和结束日期,可以通过调整当前日期的天数来实现。例如,获取本周一(即本周的第一天): ```csharp DateTime startWeek = dt.AddDays(1 - Convert.ToInt32(dt.DayOfWeek.ToString("d"))); `...
这些函数可以帮助我们快速地获取今天、昨天、上周、本月、上月以及年度的数据,使得数据分析和报告变得更为高效。以下是一些常用的MySQL时间日期函数及其用法: 1. `NOW()`:返回当前的日期和时间。 2. `CURDATE()`...
在上述代码中,使用SimpleDateFormat来获取今天、昨天、本周和上周的开始与结束时间。例如,格式"yyyy/MM/dd 00:00:00"表示日期时间的开始时刻,而"yyyy/MM/dd 23:59:59"表示日期时间的结束时刻。 4. 日期时间的...
在开发基于时间的应用程序时,经常会遇到需要获取特定时间范围(如本周、本月、本年)的需求。C#提供了强大的`DateTime`类来帮助开发者轻松实现这些功能。本文将详细介绍如何使用C#中的`DateTime`类来获取本周、本月...