起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17488|回复: 11

[结贴] 日期控件重新选择日期后, 后台取数据就变成了选择的日...

  [复制链接]

56

主题

233

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2015-6-13 14:29:04 | 显示全部楼层 |阅读模式
版本: BeX5V3.1 小版本号:
数据库: MS SQLServer 服务器操作系统: Windows 应用服务器: Tomcat
客户端操作系统: Windows 8 浏览器: Chrome
做了一个应用,用的BeX5的UIServer和baas服务器遇到入校问题,重启Studio和tomcat也没用。第一次刷新页面进来,取得的日期没有问题。但是只要重新选择了日期,前后台取得的数据就差一天。
即便是选择其它日期后,再选回来2015-06-13,后台也是2015-06-12.



日期控件01.jpg



日期控件02.jpg



日期控件03.jpg


37

主题

713

帖子

3310

积分

内部用户

积分
3310
发表于 2015-6-13 19:13:18 | 显示全部楼层
看你后台的java,那个日期是你从前台传回去的,你用浏览器工具看看请求,发出去的数据里,日期到底是什么,先确认是前后哪儿的问题?
然后把前台发请求的代码贴出来看看
回复 支持 反对

使用道具 举报

56

主题

233

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
 楼主| 发表于 2015-6-13 21:19:16 | 显示全部楼层
本帖最后由 cactus78 于 2015-6-13 21:21 编辑
jholy 发表于 2015-6-13 19:13
看你后台的java,那个日期是你从前台传回去的,你用浏览器工具看看请求,发出去的数据里,日期到底是什么, ...

我又换了台电脑,基本是新解压的BeX5,基本没用这个做过项目或改动。重新构建的类似的界面,请求地址/test,映射的是baas下面的TestServlet:
一开始进入页面自动生成的日期没问题:
22.jpg

11.jpg

44.jpg



重新选择一个日期以后:
77.jpg

88.jpg

99.jpg



前端代码在楼下
回复 支持 反对

使用道具 举报

56

主题

233

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
 楼主| 发表于 2015-6-13 21:20:09 | 显示全部楼层
define(function(require){
        var $ = require("jquery");
        var justep = require("$UI/system/lib/justep");
        var Baas = require("$UI/demo/baas/baas");

        var Model = function(){
                this.callParent();
        };
        Model.prototype.backBtnClick = function(){
                justep.Portal.closeWindow();
        };

        Model.prototype.modelModelConstructDone = function(event){
                var data = this.comp("data1");
                data.newData({
                        defaultValues : [{date : new Date()}]
                });
        };
        Model.prototype.button1Click = function(event){
                var data = this.comp("data1");
                var params = {
                                "date" : data.getValue("date")
                };
                var success = function(result){
                        alert(result);
                        if(result) alert(result);
                };
                Baas.sendRequest({
                        "url" : "/test",
                        "action" : "action",
                        "params" : params,
                        "success" : success
                });
        };
        return Model;
});
回复 支持 反对

使用道具 举报

56

主题

233

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
 楼主| 发表于 2015-6-13 21:23:22 | 显示全部楼层
Servlet代码:

package com.liminhot.test;

import java.io.IOException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSONObject;

public class TestServlet extends HttpServlet {
        private static final long serialVersionUID = 6228562347387500928L;

        protected void service (HttpServletRequest request, HttpServletResponse response) throws IOException{
                response.setContentType("text/html;charset=utf-8");
                JSONObject params = JSONObject.parseObject(request.getParameter("params"));
                String date = params.getString("date");
                System.out.println("后台日期是:" + date);
                response.getWriter().write("后台日期是:" + date);
        }
}
回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36180
发表于 2015-6-15 11:11:37 | 显示全部楼层
外卖的订单中就有new Date的可以看一下是否正确
date.png
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

56

主题

233

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
 楼主| 发表于 2015-6-15 12:09:55 | 显示全部楼层
jishuang 发表于 2015-6-15 11:11
外卖的订单中就有new Date的可以看一下是否正确

这个问题是发生在用这个日期控件重新选择日期,就不对了,跟新建数据应该没关系。
我重新换了WeX5,还是不行。
请你在你电脑上,试一下,看是不是只是我的问题。


z11.jpg



z22.jpg

回复 支持 反对

使用道具 举报

91

主题

13万

帖子

3万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
36180
发表于 2015-6-15 15:26:28 | 显示全部楼层
你好楼主,这个问题需要我在本地环境进行问题重现,所以会花费较长时间,请你耐心等待,我完成后会第一时间反馈结果,谢谢!
远程的联系方法QQ1392416607,添加好友时,需在备注里注明其论坛名字及ID,公司等信息
发远程时同时也发一下帖子地址,方便了解要解决的问题  WeX5教程  WeX5下载



如按照该方法解决,请及时跟帖,便于版主结贴
回复 支持 反对

使用道具 举报

56

主题

233

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
 楼主| 发表于 2015-6-15 22:00:28 | 显示全部楼层
jishuang 发表于 2015-6-15 15:26
你好楼主,这个问题需要我在本地环境进行问题重现,所以会花费较长时间,请你耐心等待,我完成后会第一时间 ...

不知道是哪里的问题,难倒是我电脑的时区设置有问题?
但是不管怎样,这个问题还是解决了,不过我这个只是传一个日期到后台 ,再根据这个日期查一个table出来。但是,后面还会有在表中插入数据的情况,如果有日期格式的不知道会不会还有这个问题。
解决办法是,根据7楼,传String的日期会有问题,但传一个日期对象没事,那就传一个日期对象好了,把input中选择的日期字符串转成Date对象:
z11111111111111111111111.jpg

回复 支持 反对

使用道具 举报

37

主题

713

帖子

3310

积分

内部用户

积分
3310
发表于 2015-6-16 11:34:58 | 显示全部楼层
问题的原因是:   
   1、data.getValue('date')获得的是一个日期对象,这个日期对象的默认时区是中国

   2、而Baas.sendRequest中的参数在发送前会进行一次JSON序列化JSON.stringify,这时上面那个日期对象就自动转成了格林威治标准时间,差了8个时区

可以观察下面的测试,任何一个普通的日期对象,在经过JSON.stringify后都会差8个时区

aaa.jpg


解决办法:
1、直接传字符串,通过观察 data.getValue('date') instanceof Date 可以知道这个值现在是日期时间类型
      在传递前转成字符串data.getValue('date').toString(),再进行传递就好了
2、在Java端获取时间后,转换时区,这个稍微复杂一点,但是也是可以的
      DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); // 设置格式
      df.setTimeZone(TimeZone.getTimeZone("GMT+0")); // 设置时区
      Date d = df.parse(params.getString("date")); // 这里就可以转换出当前时区的正确时间了



回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-6-29 00:43 , Processed in 0.080092 second(s), 28 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表