今天使用XCUI开发过程中发现另一个诡异的问题,就是年月日初始化之后默认时分秒的问题。

问题发生在重构交互日志页面的时候,原来的老页面是这样的:

进入了交互日志页面之后,默认会初始化时间为今天的凌晨到当前时间,然后下面的日志列表会自动的加载今天的日志信息。

重构过程中我用了XCUI组件的DateTimePicker 时间日期选择器,这个XCUI是咱们外卖自己写的组件,功能很全面,用起来也很方便,但是时间日期选择器出于人性化考虑,在页面中展示的日子格式是“yy-mm-dd hh:mm:ss”的格式方面用户更直观的看到具体时间。但是实际选择了日期控件之后得到的时间数据的字符串格式是这样的:Wed Sep 13 2017 00:00:00 GMT+0800 (中国标准时间),Sat Sep 23 2017 00:00:00 GMT+0800 (中国标准时间)。我看了一下后台ajax数据接口,请求日期的格式要求是yy-mm-dd hh:mm:ss这样的,于是写了个日期格式转换的公共函数用来转换格式。

结果测试过程中发现了一个诡异的问题,原本想要的开始时间应该是00:00:00,但是实际得到的日期默认变成了变成了08:00:00,百思不得其解,从来没有碰到过这种情况。

于是逐步排查问题所在,结果发现初始化时间的时候是没问题的

let startTime = new Date(endTime.getFullYear(),endTime.getMonth(),endTime.getDate());

得到的结果也是正确的时间

Thu Sep 07 2017 00:00:00 GMT+0800 (中国标准时间)

所以这个莫名其妙的八点来自于之后的数据转换或者插件本身的问题。开始找原因

//初始化时间和账号
let me = this;
let endTime = new Date();
let startTime = new Date(endTime.getFullYear(),endTime.getMonth(),endTime.getDate());
console.log(startTime);
console.log(endTime);
let initStartTime = formatDate(startTime);
let initEndTime = formatDate(endTime,true);
console.log(initStartTime);
console.log(initEndTime);
me.dateTimeRange = [startTime,endTime]; //dateTimeRange是控制插件显示时间的字段值
me.dateRange.startTime = initStartTime; //dateRange是需要传送给后台的字段值
me.dateRange.endTime = initEndTime;

从控制台打印出来突然发现时间格式不一致,initStartTime的格式已经变成了2017-09-07,再作为参数传入Date()初始化会变成8:00。

感觉这块很神奇,于是自己把日期格式化的东西都试了一下。

let startTime = new Date(2017,8,7,0,0,0);  //年月日时分秒
let startTime = new Date("month dd,yyyy hh:mm:ss");  //传入的是字符串,注意空格和逗号冒号
let startTime = new Date(ms);   //参数表示的是需要创建的时间和GMT时间1970年1月1日之间相差的毫秒数
let startTime = new Date("2017-09-08 00:00:00");  //出问题的就是这个方法

前面三种的日期格式化都没什么问题,即使不传后面的时分秒参数也能取到默认的当天00:00:00的时间,但是第四个就变成了默认的08:00:00了。

当前的日期标准有三个,toGMTString()、toISOString()和toUTCString()。

  1. toGMTString()这个方法在js中已经已经废除了,现在使用这个方法会返回toUTCString()的返回值,toUTCString()方法根据世界时 (UTC) 把 Date 对象转换为字符串,并返回结果。

toUTCString()返回的结果格式为:"Fri Sep 08 2017 10:24:21 GMT+0800 (中国标准时间)"。

2. toISOString()是一个比较直观的方法,可以使用ISO标准将 Date 对象转换为字符串,并返回结果。

toISOString()返回的格式是: "2017-09-08T03:00:57.951Z" 中间有字符串T链接日期和时间,后面是标准。

关于时间对象Date()的更多相关文章

  1. JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)

    1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合A ...

  2. JavaScript之时间对象Date

    时间是物理学七大常量之一.生活中记录时间有两种方式(或者说有两种计时系统):GMT(格林尼治时间)和UTC(协调世界时间). 一 创建Date对象 JS中的Date对象只能通过new关键字创建. va ...

  3. js时间对象Date()

    Date ()是一个专门用来创建时间对象的,是一个复杂数据类型,具有读写属性 语法: var time = new Date() 返回值:当前终端的时间 // 1.创建当前时间对象 var time ...

  4. JavaScript 时间对象 date()

    getYear() 获得的是距离1900年过了多少年 var d = new Date(); document.write(d+"<br />"); document. ...

  5. JavaScript Date 时间对象方法

    Date(日期/时间对象) Date 操作日期和时间的对象 Date.getDate( ) 返回一个月中的某一天 Date.getDay( ) 返回一周中的某一天 Date.getFullYear( ...

  6. 项目心得——按照指定的日期/时间创建Date对象

    项目心得——按照指定的日期/时间创建Date对象 有时,在做项目中,需要获得指定日期的Date对象,这个指定的日期或者时间可能不是当前的时间.下面讲解两种获取指定日期/时间的Date对象的方法: pa ...

  7. JS对象 Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒)。 定义一个时间对象 : var Udate=new Date();Date()的首字母须大写

    Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 定义一个时间对象 : var Udate=new Date(); 注意:使用关键字new,Date()的首 ...

  8. 【转】JAVA 8 日期/时间(Date Time)API指南

    前言 本来想写下Java 8的日期/时间API,发现已经有篇不错的文章了,那就直接转载吧~ PS:主要内容没变,做了部分修改. 原文链接: journaldev 翻译: ImportNew.com - ...

  9. js实现倒计时及时间对象

    JS实现倒计时效果代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> ...

随机推荐

  1. Android学习笔记- ButterKnife 8.0注解使用介绍

    前言: App项目开发大部分时候还是以UI页面为主,这时我们需要调用大量的findViewById以及setOnClickListener等代码,控件的少的时候我们还能接受,控件多起来有时候就会有一种 ...

  2. TransactionTemplate编程式事务管理方式的进阶使用---自定义拓展模板类

    1, 前面一篇的文章介绍了TransactionTemplate的基本使用方法. 同事在其基础上又做了一层封装,这样更贴合本公司的业务与规范. 2, 首先定义了两个接口: ServiceTemplat ...

  3. 【Lab】提取result的bits和Y-PSNR数据并整理到Excel

    [Lab]提取result的bits和Y-PSNR数据并整理到Excel 更新:使用openpyxl库直接将数据写入Excel中 注意:openpyxl是第三方库,如果没有安装.请命令行里键入pip ...

  4. hdu 6047 Maximum Sequence(贪心)

    Description Steph is extremely obsessed with "sequence problems" that are usually seen on ...

  5. CSS3伪类实现动画旋转效果

    一个简单的动画效果demo,keyframes为关键帧,图片贴在代码下方.利用了伪类实现css3动画效果,初学者可以看一下,恩.<!doctype html> <html lang= ...

  6. DHCP服务的部署和配置

    DHCP介绍: DHCP(动态主机配置协议)是一个局域网网络协议,使用UDP协议工作,主要用途:给局域网络或网络服务供应商自动分配IP地址, DHCP有3个端口,其中UDP67和UDP68为正常的DH ...

  7. java大数判断相等

    java大数判断相等: 1.equals()方法2.compareTo()方法区别:2.00与2.0 equals()方法判断不等,compareTo()方法判断相等,科学的说法可以看java api ...

  8. mysql获取当前时间,前一天,后一天

    负责的项目中,使用的是mysql数据库,页面上要显示当天所注册人数的数量,获取当前的年月日,我使用的是 CURDATE(), 错误的sql语句 eg:SELECT COUNT(*) FROM USER ...

  9. 两个List比较各自对象的属性相同的问题

    最近做checkbox默认勾选的时候,涉及到两个list直接比较彼此对象的Id属性是否相同的问题.能力有限,想到这个笨方法. 创建一个Bean: public class Bean { private ...

  10. Ubuntu 16.04 + CUDA 8.0 + cuDNN v5.1 + TensorFlow(GPU support)安装配置详解

    随着图像识别和深度学习领域的迅猛发展,GPU时代即将来临.由于GPU处理深度学习算法的高效性,使得配置一台搭载有GPU的服务器变得尤为必要. 本文主要介绍在Ubuntu 16.04环境下如何配置Ten ...