java根据年月显示每周
一、页面效果
1、展示7月份的所有周。

2、当前时间2018.08.02 , 显示到本周。

二、前端代码
1、显示层的代码
<span id="weekyear">
<select class="radius" id="selectyear" name="selectyear"
onchange="getmyMonth(this);" style="width: 80px; height: 33px;">
<c:forEach var="ys" items="${years}">
<option value="${ys}">${ys}年</option>
</c:forEach>
</select>
</span>
<span id="weekmon">
<select class="radius" id="selectmon"
name="selectmon" onchange="getmyweeks(this);"
style="width: 80px; height: 33px;">
</select>
</span>
<span id="week"></span>
2、
进入页面时加载getmyMonthOne函数,生产月份数据。
ajax返回时再调用getmyweekOne(selectyear,selectmon);
生产这一个月的每一周。
//页面加载
function getmyMonthOne(){
$.ajax({
type : 'POST',
url : '${ctx}/weekly/weekly/createMon',
data : '',
success : function(data) {
var obj = JSON.parse(data);
var monthNode = document.getElementById("selectmon");
$("#selectmon").find("option").remove();
$.each(obj,function(name,value) {
var opt = document.createElement("option");
//设置option标签体
if(value.mon<10){
opt.innerHTML="0"+value.mon+"月";
opt.value=value.mon;
}else {
opt.innerHTML=value.mon+"月";
opt.value=value.mon;
}
monthNode.appendChild(opt);
}
);
//当前年月
var selectyear = $("#selectyear").val();
var selectmon = $("#selectmon").val();
getmyweekOne(selectyear,selectmon);
}
});
}
//创建月
function getmyMonth(o){
//获取选择的年份
var index=o.selectedIndex;
var oldyear = o.options[index].value;
$.ajax({
type : 'POST',
url : '${ctx}/weekly/weekly/createMon',
data : 'selectyear='+oldyear,
success : function(data) {
var obj = JSON.parse(data);
var monthNode = document.getElementById("selectmon");
$("#selectmon").find("option").remove();
$.each(obj,function(name,value) {
var opt = document.createElement("option");
//设置option标签体
if(value.mon<10){
opt.innerHTML="0"+value.mon+"月";
opt.value=value.mon;
}else {
opt.innerHTML=value.mon+"月";
opt.value=value.mon;
}
monthNode.appendChild(opt);
}
);
//页面显示当前年月
var selectyear = $("#selectyear").val();
var selectmon = $("#selectmon").val();
getmyweekOne(selectyear,selectmon);
}
});
}
3、生产一个月的所有周。
/* 切换年份时选择生成周 */
function getmyweekOne(oNeyear,Onemon){
//首先清除已经有的周份
$("#week").html("");
var oldmon = Onemon;
//获取选择的年份
var selectyear = oNeyear;//选中的值
$.ajax({
type:'POST',
url:'${ctx}/weekly/weekly/dateWeek',
data:'selectyear='+selectyear+"&selectmonth="+oldmon,
success:function(data){ var obj = JSON.parse(data);
$.each(obj,function(name,value) {
if(value.isCurrWeek==1){
$("#week").append(" <button class='btn btn-success radius' style='margin-top:1%;' data-title='写周报' data-href='${ctx}/weekly/weekly/new?myfrom="
+ value.weekStartDay
+ "&myto="
+ value.weekendDay
+ "&myyear="
+ value.startYear
+ "' onclick='newOrEditweek(this);' value="+value.weekStartDay+","+value.weekendDay+","+value.startYear+","+value.endYear+">"+value.weekStartDay+"/"+value.weekendDay+"(本周)</button> ");
}else{
$("#week").append(" <button class='btn btn-success radius' style='margin-top:1%;' data-title='写周报' data-href='${ctx}/weekly/weekly/new?myfrom="
+ value.weekStartDay
+ "&myto="
+ value.weekendDay
+ "&myyear="
+ value.startYear
+ "' onclick='newOrEditweek(this);' value="+value.weekStartDay+","+value.weekendDay+","+value.startYear+","+value.endYear+">"+value.weekStartDay+"/"+value.weekendDay+"</button> "); }
});
}
});
} //生成周
function getmyweeks(o){
//首先清除已经有的周份
$("#week").html("");
//获取选择的月份
var index=o.selectedIndex;
var oldmon = o.options[index].value;
//获取选择的年份
var selectyear = $('#selectyear option:selected').val();//选中的值
$.ajax({
type:'POST',
url:'${ctx}/weekly/weekly/dateWeek',
data:'selectyear='+selectyear+"&selectmonth="+oldmon,
success:function(data){
var obj = JSON.parse(data);
$.each(obj,function(name,value) {
if(value.isCurrWeek==1){
$("#week").append(" <button class='btn btn-success radius' style='margin-top:1%;' data-title='写周报' data-href='${ctx}/weekly/weekly/new?myfrom="
+ value.weekStartDay
+ "&myto="
+ value.weekendDay
+ "&myyear="
+ value.startYear
+ "' onclick='newOrEditweek(this);' value="+value.weekStartDay+","+value.weekendDay+","+value.startYear+","+value.endYear+">"+value.weekStartDay+"/"+value.weekendDay+"(本周)</button> ");
}else{
$("#week").append(" <button class='btn btn-success radius' style='margin-top:1%;' data-title='写周报' data-href='${ctx}/weekly/weekly/new?myfrom="
+ value.weekStartDay
+ "&myto="
+ value.weekendDay
+ "&myyear="
+ value.startYear
+ "' onclick='newOrEditweek(this);' value="+value.weekStartDay+","+value.weekendDay+","+value.startYear+","+value.endYear+">"+value.weekStartDay+"/"+value.weekendDay+"</button> "); }
});
}
}); }
三、后端代码
1、Mon类(传递月份)
public class Mon {
private String mon;
public String getMon() {
return mon;
}
public void setMon(String mon) {
this.mon = mon;
}
public Mon() {
}
}
2、WeekStartAndEndDate类(传递周列表的参数)
public class WeekStartAndEndDate {
private String weekStartDay;
private String weekendDay;
private String isCurrWeek;
private String startYear;
private String endYear;
public String getStartYear() {
return startYear;
}
public void setStartYear(String startYear) {
this.startYear = startYear;
}
public String getEndYear() {
return endYear;
}
public void setEndYear(String endYear) {
this.endYear = endYear;
}
public String getWeekStartDay() {
return weekStartDay;
}
public void setWeekStartDay(String weekStartDay) {
this.weekStartDay = weekStartDay;
}
public String getWeekendDay() {
return weekendDay;
}
public void setWeekendDay(String weekendDay) {
this.weekendDay = weekendDay;
}
public String getIsCurrWeek() {
return isCurrWeek;
}
public void setIsCurrWeek(String isCurrWeek) {
this.isCurrWeek = isCurrWeek;
}
public WeekStartAndEndDate() {
// TODO Auto-generated constructor stub
}
}
3、处理周的controller
@RequestMapping("/dateWeek")
public void dateWeek(HttpServletRequest request,HttpServletResponse response) {
String selectyear = request.getParameter("selectyear");
String selectmonth = request.getParameter("selectmonth");
int selcctYearVal = Integer.parseInt(selectyear);
int selcctMonthVal = Integer.parseInt(selectmonth);
PrintWriter out = null;
try {
out = response.getWriter();
Dateutil date = new Dateutil();
//判断是不是本月
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
int currYear = calendar.get(Calendar.YEAR);//当前年份
int currMonth = (calendar.get(Calendar.MONTH) + 1);//当前月份
SimpleDateFormat sdfYMd = new SimpleDateFormat("yyyy-MM-dd");
ArrayList<WeekStartAndEndDate> list = new ArrayList<>();
if(selcctYearVal == currYear&&selcctMonthVal==currMonth){
//本月
String stone = selectyear+"-"+selectmonth+"-"+01;
//当前日期
Date d = new Date();
String end = sdfYMd.format(d);
int countstart = date.getWeek(stone);//当前月份的第一天在本年的多少周
int countend = date.getWeek(end); //当前时间在本年的多少周
//如果是新的一年(countend取同一年的最后一周)
int sum = countend-countstart;
int sumYear = date.getWeekCountYear(new Date())-countstart;
if(sum<0){
sum = sumYear+1;
}
//展示一个月的每周数据
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
for (int i = 0; i <=sum; i++){
WeekStartAndEndDate wsae = new WeekStartAndEndDate();
Date weekStartDayData = date.getFirstDayOfWeek(selcctYearVal, countstart-1);
Date weekendDayData = date.getLastDayOfWeek(selcctYearVal, countstart-1);
//一周开始时间
String weekStartDay = sdf.format(weekStartDayData);
//一周结束时间
String weekendDay = sdf.format(weekendDayData);
wsae.setWeekStartDay(weekStartDay);
wsae.setWeekendDay(weekendDay);
wsae.setStartYear(sdfYMd.format(weekStartDayData).substring(0,4));
wsae.setEndYear(sdfYMd.format(weekendDayData).substring(0,4));
//本周
if(i==sum){
wsae.setIsCurrWeek("1");//代表本周
}
countstart++;
list.add(wsae);
}
}else{
//获得本月开始日期
String stone = selectyear+"-"+selectmonth+"-"+01;
//获取本月最后一天
String end = date.getLastDayOfMonth(selcctYearVal,selcctMonthVal);
int countstart = date.getWeek(stone);//当前月份的第一天在本年的多少周
int countend = date.getWeek(end); //当前月份的最后一天在本年的多少周
//如果是新的一年(countend取同一年的最后一周)
int sum = countend-countstart;//本月展示的周数
int sumYear = date.getWeekCountYear(new Date())-countstart;
if(sum<0){
sum = sumYear+1;
}
//展示一个月的每周数据
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd");
//判断本周
Date nowDate = new Date();
SimpleDateFormat sdfNow = new SimpleDateFormat("yyyy-MM-dd");
String dateNowStr = sdfNow.format(nowDate);
int nowWeekCount = date.getWeek(dateNowStr);
for (int i = 0; i <=sum; i++){
WeekStartAndEndDate wsae = new WeekStartAndEndDate();
Date weekStartDayData = date.getFirstDayOfWeek(selcctYearVal, countstart-1);
Date weekendDayData = date.getLastDayOfWeek(selcctYearVal, countstart-1);
//一周开始时间
String weekStartDay = sdf.format(weekStartDayData);
//一周结束时间
String weekendDay = sdf.format(weekendDayData);
wsae.setWeekStartDay(weekStartDay);
wsae.setWeekendDay(weekendDay);
wsae.setStartYear(sdfYMd.format(weekStartDayData).substring(0,4));
wsae.setEndYear(sdfYMd.format(weekendDayData).substring(0,4));
//设置本周
if(selcctYearVal==currYear && nowWeekCount==countstart){
wsae.setIsCurrWeek("1");//代表本周
}
list.add(wsae);
countstart++;
}
}
JSONArray result = JSONArray.fromObject(list);
out.print(result.toString());
} catch (IOException e) {
out.print(0);
}
}
4、生成月份
/**
* 生成月份
* @param request
* @param response
*/
@RequestMapping("/createMon")
public void createMon(HttpServletRequest request,HttpServletResponse response) {
String selectyear = request.getParameter("selectyear");
PrintWriter out = null;
try {
out = response.getWriter();
Calendar calendar=Calendar.getInstance();
calendar.setTime(new Date());
//获取当前年
int year = calendar.get(Calendar.YEAR);
//获取当前月
int month=calendar.get(Calendar.MONTH)+1;
//创建年份数组
List<Mon> months = new ArrayList<Mon>();
//本年已经过去的月份
if(StringUtils.isNotEmpty(selectyear)){
int intYearVal = Integer.parseInt(selectyear);
if (intYearVal == year) {
for (int j = month; 1 <= j; j--) {
Mon m = new Mon();
m.setMon(j+"");
months.add(m);
}
}else{
for (int o = 1; o <= 12; o++) {
Mon m = new Mon();
m.setMon(o+"");
months.add(m);
}
}
}else{
for (int j = month; 1 <= j; j--) {
Mon m = new Mon();
m.setMon(j+"");
months.add(m);
}
}
JSONArray result = JSONArray.fromObject(months);
out.print(result.toString());
} catch (Exception e) {
out.print(0);
}
}
5、进入页面时,需要生成的年份。
Calendar calendar=Calendar.getInstance();
calendar.setTime(new Date());
//获取当前年
int year = calendar.get(Calendar.YEAR);
List<Integer> years = new ArrayList<Integer>();
//2015 start
for (int i = year; 2015 <= i; i--) {
years.add(Integer.valueOf(i));
}
request.setAttribute("years", years);
6、工具类
public class Dateutil {
/**
* 取得当前日期是多少周
*
* @param date
* @return
*/
public static int getWeekOfYear(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setMinimalDaysInFirstWeek(7);
c.setTime (date);
return c.get(Calendar.WEEK_OF_YEAR);
}
/**
* 得到某一年周的总数
*
* @param year
* @return
*/
// public static int getMaxWeekNumOfYear(int year) {
// Calendar c = new GregorianCalendar();
// c.set(year, Calendar.DECEMBER, 31, 23, 59, 59);
//
// return getWeekOfYear(c.getTime());
// }
/**
* 设置周一为每周第一天(得到某一年周的总数)
* @param date
* @return
*/
public static int getWeekCountYear(Date date){
// 获取日历类实例
java.util.Calendar calendar = java.util.Calendar.getInstance();
// 设置时间
calendar.setTime(date);
// 设置周一为每周第一天
calendar.setFirstDayOfWeek(java.util.Calendar.MONDAY);
// 返回当年最大周数
return calendar.getActualMaximum(java.util.Calendar.WEEK_OF_YEAR);
}
/**
* 得到某年某周的第一天
*
* @param year
* @param week
* @return
*/
public static Date getFirstDayOfWeek(int year, int week) {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set (Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE, week * 7);
return getFirstDayOfWeek(cal.getTime ());
}
/**
* 得到某年某周的最后一天
*
* @param year
* @param week
* @return
*/
public static Date getLastDayOfWeek(int year, int week) {
Calendar c = new GregorianCalendar();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, Calendar.JANUARY);
c.set(Calendar.DATE, 1);
Calendar cal = (GregorianCalendar) c.clone();
cal.add(Calendar.DATE , week * 7);
return getLastDayOfWeek(cal.getTime());
}
/**
* 取得指定日期所在周的第一天
*
* @param date
* @return
*/
public static Date getFirstDayOfWeek(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
return c.getTime ();
}
/**
* 取得指定日期所在周的最后一天
*
* @param date
* @return
*/
public static Date getLastDayOfWeek(Date date) {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(date);
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
return c.getTime();
}
/**
* 取得当前日期所在周的第一天
*
* @param date
* @return
*/
public static Date getFirstDayOfWeek() {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(new Date());
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
return c.getTime ();
}
/**
* 取得当前日期所在周的最后一天
*
* @param date
* @return
*/
public static Date getLastDayOfWeek() {
Calendar c = new GregorianCalendar();
c.setFirstDayOfWeek(Calendar.MONDAY);
c.setTime(new Date());
c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
return c.getTime();
}
/**
* 得到某一天是这一年的第几周
*
* @param date
* @return
*/
public static int getWeek(String date) {
Calendar cal = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
//设置周一开始算
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal.setTime(format.parse(date));
} catch (ParseException e) {
e.printStackTrace();
}
int week = cal.get(Calendar.WEEK_OF_YEAR);
return week;
}
/**
* 获得该月第一天
* @param year
* @param month
* @return
*/
public static String getFirstDayOfMonth(int year,int month){
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最小天数
int firstDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
//设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH, firstDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String firstDayOfMonth = sdf.format(cal.getTime());
return firstDayOfMonth;
}
/**
* 获得该月最后一天
* @param year
* @param month
* @return
*/
public static String getLastDayOfMonth(int year,int month){
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
到此,显示周的列表就完成了。
java根据年月显示每周的更多相关文章
- 自定义一个只显示年月的DatePicker(UIDatePicker无法实现年月显示)
HooDatePicker 介绍(introduction) ==================================================项目需要一个DatePicker,只显 ...
- 解决linux下javac -version和java -version版本显示不一致
解决linux下javac -version和java -version版本显示不一致 [javascript] view plaincopy [root@localhost usr]# $JAVA_ ...
- 2017-2018-2 165X 『Java程序设计』课程每周成绩公布
2017-2018-2 165X 『Java程序设计』课程 每周成绩公布 本博客将跟随教学进度不定期更新,每次更新后将在课程群公布.如对成绩有疑问,请于公布成绩后的1天之内联系助教,进行审核确认. - ...
- ubuntu系统中java -version所显示的版本与/etc/profile中配置的$JAVA_HOME的关系
问题产生 ubuntu 18.04环境下,执行 java -version 发现与/etc/profile中的$JAVA_HOME所设置的java版本不同. 推测原因 最近用apt install 安 ...
- java 输入年月,获取日历表
/* 做日历作业: 输入一个时间如: 2016-11 就显示2016年11月的日历显示 */ import java.util.*; class calendar { public static vo ...
- JAVA中浮点数显示
//Java小数点后留两位 double num1 =11; double num2 =21; String num3 =""; //函数可以确定十进制数的显示格式:百分数,限定小 ...
- java Page分页显示
//entity层实体类 import java.util.List; //分页展示 //相关属性:当前页,页大小(每页显示的条数),总页数,总条数,数据 //select * from t_user ...
- MySQL 查询语句中自己定义的中文内容在Java Web 中显示为问号
Java Web 端做查询时,性别字段存的是数字,1代表男,2代表女,取数据时将性别转为汉字显示在页面,sql语句如下,结果发生了问题 select a.emp_id,a.emp_name ,cas ...
- java发送邮件无法显示图片 图裂 的解决办法
package com.thinkgem.jeesite.common.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; ...
随机推荐
- 根据Excel模板存储数据,并下载
@RequestMapping("/exportList") @ResponseBody public Map<String, Object> exportList(H ...
- PowerShell工作流学习-3-挂起工作流
关键点: a)可使用Suspend-Job或Suspend-Workflow(从工作流中)挂起工作流,无法从工作流中恢复工作流. 例a: Workflow Test-Suspend { $a = Ge ...
- Apache Thrift的C++多线程编程定式
Facebook贡献给Apache的开源RPC组件Thrift有着广泛的应用,C++中使用Thrift也十分普遍,但由于Thrift的Handler会被多个线程调用,因而多线程中应用并不直接的友好,利 ...
- Codeforces Round #512 E - Vasya and Good Sequences
有时候觉得自己就是个思路搬运机,只会搬运思路 这个题首先说了求的是好区间的个数, 好区间满足条件: 1.二进制位1的数量和为偶数 2.w[i]表示a[i]的二进制上1的个数 ,sum[i] = ...
- Ngui使用随心记
Ngui的一些基础使用心得! BB:首先BB一下我觉得NGUI和UGUI哪个好?我首推UGUI,先不说是官方内置,在使用的方便性上也要好很多,而且NGUI停止更新了!还有就是NGUI有BUG! Ngu ...
- React-Native 问题随记2: com.android.builder.testing.api.DeviceException
错误详细: Execution failed for task ':app:installDebug'.> com.android.builder.testing.api.DeviceExcep ...
- electron 使用 node-ffi 调用 C++ 动态链接库(DLL)
一.为什么需要使用DLL 需要使用系统 API 操作或扩展应用程序: 需要调用第三方的接口API,特别是与硬件设备进行通信,而这些接口 API 基本上都是通过 C++ 动态链接库(DLL)实现的: 需 ...
- Spring IOC容器的实现原理
1 概述 1.1 依赖反转模式 在Java中,一个复杂的功能一般都需要由两个或者两个以上的类通过彼此合作来实现业务逻辑的,这使得每个对象都需要与其合作的对象的引用.如果这个获取依赖对象的过程需要自己去 ...
- Maven - Tips
1- Maven的Settings http://maven.apache.org/settings.html 2- Maven设置代理 示例: <proxies> <proxy&g ...
- GMM基础
一.单成分单变量高斯模型 二.单成分多变量高斯模型 若协方差矩阵为对角矩阵且对角线上值相等,两变量高斯分布的等值线为圆形. 若协方差矩阵为对角矩阵且对角线上值不等,两变量高斯分布的等值线为椭圆形, 长 ...