今天使用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. Linux基本命令整理_sheng

    Linux版本 Linux系统是一个多用户.多任务的分时操作系统. Linux版本分为内核版本和发行版本. 常见的Linux发行版有: RedHat(分为用于企业的Red Hat Enterprise ...

  2. [技术] OIer的STL入门教程

    注: 本文主要摘取STL在OI中的常用技巧应用, 所以可能会重点说明容器部分和算法部分, 且不会讨论所有支持的函数/操作并主要讨论 C++11 前支持的特性. 如果需要详细完整的介绍请自行查阅标准文档 ...

  3. DynamicXml

    /* var xml = @"<root><books><book is_read=""false""><a ...

  4. HTML 超链接 表格

    1...超链接 <a href="网址" target="_blank"> 被点击的文字</a> 如果把 target 属性设置为&qu ...

  5. Hotkeys.js 2.0.2 发布,捕获键盘输入和输入的组合键快捷键,它没有依赖

    这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb),gzip:1.9k. 更新内容: 添加测试用例: 添加更多特殊键支持: 修复bug. __ ...

  6. MySQL replication illegal mix of collations

    MySQL replication case 一则 转载:http://www.vmcd.org/2013/09/mysql-replication-case-%E4%B8%80%E5%88%99/ ...

  7. 两点补充——CSS3新属性以及弹性布局

    CSS3 新属性 一.[ CSS3新增属性前缀 ] 1.-webkit-:chrome/safari 2.-moz-:火狐 3.-mo-:IE 4.-o-: Opera 欧朋 二 .[CSS 长度单位 ...

  8. window下MongoDB的配置与安装

    前言 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写,支持Windows,Linux,OSX,Solaris等平台,默认端口为27017,是一个效率非常高的nosql数据库. 我的 ...

  9. java web Cookie浅谈

    1.会话控制 > Http协议 Http协议两个缺陷: 1.HTTP协议是纯文本的 2.HTTP协议是无状态的 服务器不能简单的通过HTTP协议来区分多次请求是否发自同一个用户 虽然通过HTTP ...

  10. Tuple元组 C#

    使用元组, 一些简单的结构或对象就不需要新建一个类了. https://msdn.microsoft.com/zh-cn/library/system.tuple.aspx