【搜索日期选择同一天,点击搜索两次的时候,结束日期会变多一天 】 | IT修真院·坑乎
咨询电话 : 010-59478634
切换导航
首页
我的提问
我的回答
我的点赞
消息通知
个人主页
×
提示
尚未登陆,前往官网登陆?
×
提示
尚未登陆,前往官网登陆?
搜索日期选择同一天,点击搜索两次的时候,结束日期会变多一天
我也踩过这个坑(
3
)
已统计您的踩坑,无需重复点击
回答(1)
详细描述
搜索日期使用的是ui-datetimepicker插件,当开始日期结束日期选择为同一天时,点击两次搜索,结束日期会显示多一天。一开始觉得是因为判断日期为同一天时,要给结束日期加86399999,点一次为取的当天的23:59(近似),当点两次后还在增加,就到了第二天。就想将第二次点击加多的86399999减去,但是按照逻辑好像实现不了。后面console.log时间戳和标准时间,发现当点击搜索第二次的时候,时间会多8小时,开始日期加8小时还是当天,但是结束日期加8小时就到了第二天了,所以才会出现这种BUG。查找网上资料,是说因为时区的问题。可是我看console.log()的标准时间,显示的是GMT东八区中国标准时间,不是UTC时间。后面找到问题所在,日期之所以会在点击两次搜索之后结束日期变多一天是因为时区的问题。使用getTime()正常来说是返回某个时间到1970年1月1日0:00的毫秒数,但现在返回的却是这个时间点到1970年1月1日08:00的毫秒数。原因是在将时间戳转化成日期时,我使用了“-”来连接时间,像2018-08-23,当用“-”来连接时间的时候, 是用UTC 时区来处理的,而不是用本地时区处理的,因此和格林尼治恰好差8小时,就成了这个时间点到1970年1月1日08:00的毫秒数,从而出现多了8个小时,结束时间多了一天。解决的方法是中间用其他符号,例如‘/’来连接时间2018/08/23。
截图
图1为正常页面,点击两次搜索时间不会变话。图2为问题页面,点击两次搜索,结束日期变为第二天,console.log出来的标准时间多出8个小时。
代码
修改时间
—
HTML
app.controller('artCtrl',function ($scope,$http,$state,$stateParams,state,type) { //日期选择 $('.form_date').datetimepicker({ language: 'zh-CN', weekStart: 1, todayBtn: 1, autoclose: 1, todayHighlight: 1, startView: 2, minView: 2, forceParse: 0, }); var myDate = new Date(); var date = myDate.toLocaleDateString(); $scope.end = function(){ $('#date1').datetimepicker( 'setEndDate',$scope.endDate ); }; if ($scope.endDate == undefined){ $('#date1').datetimepicker( 'setEndDate',date ); } $('#date2').datetimepicker( 'setEndDate',date ); //下拉选项 $scope.state = state; $scope.type = type; //请求数据 $http({ method:"GET", url:"/carrots-admin-ajax/a/article/search", params:{ page: $stateParams.page, //使用$stateParams获取传递的参数 size: $stateParams.size, total: $stateParams.total, startAt: $stateParams.startAt, endAt: $stateParams.endAt, status: $stateParams.status, type: $stateParams.type, id: $stateParams.id, } }).then ( function (resp) { $scope.list = resp.data.data.articleList;//列表数据渲染 $scope.size = resp.data.data.size;//每页显示条数 $scope.totalItems = resp.data.data.total;//数据数量 $scope.currentPage = $stateParams.page;//当前页 //翻页 $scope.page = function () { $state.go("home.article",{ page:$scope.currentPage }) }; //分页确定按钮事件 $scope.pgbtn = function () { //只跳转页面 if ($scope.pgnum == undefined && $scope.pggo !== undefined){ $state.go("home.article",{ page:$scope.pggo, },{ reload: true }) } //只改变单页条数 if ($scope.pgnum !== undefined && $scope.pggo == undefined){ $state.go("home.article",{ size:$scope.pgnum, },{ reload: true }) } //改变单页条数,跳转页面 if ($scope.pgnum !== undefined && $scope.pggo !== undefined){ $state.go("home.article",{ page:$scope.pggo, size:$scope.pgnum, },{ reload: true }) } }; //转换时间戳 //搜索 $scope.searchBtn = function () { var strDate = new Date($scope.strDate); var endDate = new Date($scope.endDate); var time1 = strDate.getTime(); var time2 = endDate.getTime(); console.log($scope.strDate,$scope.endDate); console.log(strDate,endDate); //若日期没选,则取时间为空,因为时间值会变成NaN,发送的时间值的时候会报错 if (time1 != time1 || time2 != time2){ time1 = ''; time2 = ''; } else if (time1 == time2) {//选择同一天需给另一时间戳添加参数 time2 += 86399999; //进行搜索跳转 } $state.go("home.article",{ startAt:time1, endAt:time2, status:$scope.selectState, type:$scope.selectType }); }; //清除 $scope.clearBtn = function () { $state.go("home.article",{ startAt:'', endAt:'', status:'', type:'' }) }; //新增article按钮 $scope.newBtn = function(){ var Btn = 1; sessionStorage.setItem('Btn',Btn); $state.go("home.new",{}) }; //编辑 $scope.setBtn = function(){ var Btn = 2; var setId = $scope.list[this.$index].id; sessionStorage.setItem('setId',setId); sessionStorage.setItem('Btn',Btn); $state.go("home.new",{}) }; //存储选择 //日期 if ($stateParams.startAt == undefined) { $scope.strDate = ''; } else { var str = new Date(Number($stateParams.startAt)); var end = new Date(Number($stateParams.endAt)); Ys = str.getFullYear()+'/'; Ms = (str.getMonth()+1 < 10 ? '0'+ (str.getMonth()+1) : str.getMonth()+1) + '/'; Ds = (str.getDate() < 10 ? '0'+ str.getDate() : str.getDate()); Ye = end.getFullYear()+'/'; Me = (end.getMonth()+1 < 10 ? '0'+(end.getMonth()+1) : end.getMonth()+1) + '/'; De = (end.getDate() < 10 ? '0'+ end.getDate() : end.getDate()); $scope.strDate = Ys+ Ms + Ds; $scope.endDate = Ye+ Me + De; } //状态类型 $scope.selectState = $stateParams.status; $scope.selectType = $stateParams.type; //上下线按钮 for (i=0;i<$scope.list.length;i++){ if ($scope.list[i].status == 1) { $scope.list[i].line = '上线' } else { $scope.list[i].line = '下线' } } $scope.changeLine = function (){ var lineId = $scope.list[this.$index].id; var lineStatus = $scope.list[this.$index].status; if (lineStatus==2) { var onThis = confirm("确认下线此数据?"); var line = 1; } else { var onThis = confirm("确认上线此数据?"); var line = 2; } if (onThis == true){ $http({ method:'put', url:"/carrots-admin-ajax/a/u/article/status", params:{ id:lineId, status:line } }).then(function () { $state.reload(); }) } }; //删除 $scope.delete = function () { var clearThis = confirm("确认删除此数据?"); if (clearThis == true){ var clearId = $scope.list[this.$index].id; $http({ method:'delete', url:"/carrots-admin-ajax/a/u/article/" + clearId, }).then(function () { $state.reload(); }) } } } ); });
JS
编辑于2024-11-23
时间排序
热门排序
[武汉|结业弟子]JS-刘平
0
因为你每次点击你的86399999就会累加一次,所以这里加完了还需要减回去,否则搜索时候就是点击一次,搜索时间增加一天
查看全部>
编辑于2019-11-16
首页
1
末页
去第
页
确定
Copyright ©2015 北京葡萄藤信息技术有限公司 All Rights Reserved | 京ICP备15035574号-1
复制链接
新浪微博
微信扫一扫
2536
0
10
搜索日期选择同一天,点击搜索两次的时候,结束日期会变多一天
1
3