Date()创建日期
哎。
。这些人变得懒惰个月。。。经过以上撰写博客的工作
上周五测试报告的问题。上述日期的计算是有问题。两个日期之间的差异原创1天,然而,系统将计算的差31天。
(就在那一天2014年10月31日本 星期五)
后来我查原因,一哥招待会js代码是这样写的
功能是想创建一个为'2014-11-03 23:59:59'的时间对象。
var expirationDateStr = '2014-11-03 23:59:59';
var expirationDate = new Date();
expirationDate.setFullYear(parseInt(expirationDateStr.substr(0, 4), 10));
expirationDate.setMonth(parseInt(expirationDateStr.substr(5, 2), 10) - 1);
expirationDate.setDate(parseInt(expirationDateStr.substr(8, 2), 10));
expirationDate.setHours(parseInt(expirationDateStr.substr(11, 2), 10));
expirationDate.setMinutes(parseInt(expirationDateStr.substr(14, 2), 10));
expirationDate.setSeconds(parseInt(expirationDateStr.substr(17, 2), 10));
第二句:new一个Date对象,这个创建的是系统当前时间对象,如果当时时间为2014-10-31 17:30:00。
控制台打印expirationDate为:Fri Oct 31 23:59:59 UTC+0800 2014(2014-10-31 23:59:59) 。
后六句:设置时间,将expirationDateStr中的年月日时分秒替换到获取的系统时间。
(parseInt(?,10)作用是把?转化为十进制int型整数。substr()字符串截取方法)
我们能够再控制台中打印一下替换后的expirationDate。(console.info(expirationDate))
理想中应该为: Mon Nov 3 23:59:59 UTC+0800 2014(2014-11-03 23:59:59)
但是当时打印出来的却是:Wed Dec 3 23:59:59 UTC+0800 2014(2014-12-03 23:59:59)
后来我特别郁闷,查了js的api认为没问题啊setFullYear();setMonth();setDate();确实是这么用来的啊。
。想想是不是由于传进去的參数不是int。后来发现也不是。
那为什么会出现这样的情况呢?
分析一下
当前日期“2014-10-31 17:30:00”
然后:setFullYear(2014)没有问题。还是2014-10-31 17:30:00
setMonth(10) 出问题了。日期变为“2014-12-01 17:30:00”。这是由于setMonth(10)即改变日期为“2014-11-31 17:30:00”,可是这个日期是不存在的。Date会自己主动识别并进行转化,11月仅仅有30天,则月变为12。日则为1.。
。
最后setMonth(10)事实上是将“2014-10-31 17:30:00”转换成“2014-12-01 17:30:00”(setMonth()參数为0-11,10则为11月)
setDate(03) 由于设置月的时候日期已经变为“2014-12-01 17:30:00”,所以此时日期为:“2014-12-03 17:30:00”。
后面时分秒都没有错 即出现文章開始控制台打印转换后日期Wed Dec 3 23:59:59 UTC+0800 2014(2014-12-03 23:59:59)
所以。要实现以上功能不能直接用setFullYear();setMonth();setDate();替换当前日期的年月日。
(当然java中也是会出现这样的问题)
那应该怎样设置就涉及到Date()初始化的问题了。
js的API中对Date()的创建有例如以下四种:
var d = new Date();
var d = new Date(milliseconds);
var d = new Date(dateString);
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
话说API中好似没那么具体。
。
。。
对于这四种方法我仅仅说第三种new Date(dateString)
var str1 = "2014-11-06 15:30:00";
var str2 = "06-11-2014 15:30:00";
var str3 = "2014/11/06 15:30:00";
var str4 = "06/11/2014 15:30:00";
var str5 = "2014年11月06日 15:30:00";
var str6 = "06日11月2014年 15:30:00";
console.info("*******创建2014-11-06 15:30:00 日期对象測试*******");
console.info(str1 + ":" + new Date(str1));
console.info(str2 + ":" + new Date(str2));
console.info(str3 + ":" + new Date(str3));
console.info(str4 + ":" + new Date(str4));
console.info(str5 + ":" + new Date(str5));
console.info(str6 + ":" + new Date(str6));
console.info("*****正确为:Thu Nov 6 15:30:00 UTC+0800 2014 *****");
控制台測试一下这段js结果例如以下:
*******创建2014-11-06 15:30:00 日期对象測试*******
2014-11-06 15:30:00:Invalid Date
06-11-2014 15:30:00:Wed Jun 11 15:30:00 UTC+0800 2014
2014/11/06 15:30:00:Thu Nov 6 15:30:00 UTC+0800 2014
06/11/2014 15:30:00:Wed Jun 11 15:30:00 UTC+0800 2014
2014年11月06日 15:30:00:Invalid Date
06日11月2014年 15:30:00:Invalid Date
*****正确为:Thu Nov 6 15:30:00 UTC+0800 2014 *****
能够看出dateString 的格式为var str3 = "2014/11/06 15:30:00"; 即日期用斜杠“/”间隔 为 : yyyy/MM/dd hh:mm:ss
尽管我不知道还有没有其它的格式,的那是我发现new Date("11-06-2014 15:30:00");也能创建一个日期为2014-11-06 15:30:00对象。
既然如此。假设要实现文章開始代码的功能,我们能够用下面代码实现:
var expirationDateStr = '2014-11-03 23:59:59';
var expirationDate = new Date(expirationDateStr.replace(/-/g, "/"));
两句代码就能够了。
replace()检查自己。
replace(/-/g, "/")这意味着替换字符串“-”至“/”,替换字符串后,格公式2014/11/03 23:59:59。g全球另类方式,没有g然后再次运行replace仅更换“-”
Date()创建日期的更多相关文章
- js 日期对象Date以及传参
创建一个日期对象,日期对象可传参new Date() 创建日期对象getFullYear() 获取年份 getMonth() 获取月份 返回值是 0(一月) 到 11(十二月) 之间的一个整数 get ...
- Java中日期格式(String、Date、Calendar)的相互转换
package day20190318; import java.text.ParseException; import java.text.SimpleDateFormat; import java ...
- Java中夏令时带来的Date不一致问题 (转)
http://www.cnblogs.com/snake-hand/archive/2013/06/10/3131157.html 最近同事W发现使用Java Date创建日期,在不同的机器上执行,得 ...
- JavaScript Date 日期属性和方法
JavaScript 日期(Date) Date对象用于处理日期和时间.使用对象new Date()创建日期.实例化日期有四种方式: var d1 = new Date(); var d2 = new ...
- JavaScript---js语法,数据类型及方法, 数组及方法,JSON对象及方法,日期Date及方法,正则及方法,数据类型转换,运算符, 控制流程(三元运算),函数(匿名函数,自调用函数)
day46 一丶javascript介绍 JavaScript的基础分为三个 1.ECMAScript:JavaScript的语法标准.包括变量,表达式,运算符,函数,if语句,for语句 ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- 使用Servlet和JSP实现一个简单的Web聊天室系统
1 问题描述 利用Java EE相关技术实现一个简单的Web聊天室系统,具体要求如下. (1)编写一个登录 ...
- 前端之JavaScript基础
前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...
- OC — (Foundation框架-NSDate)
NSDate:是OC中处理日期时间的一个类,可以用来表示时间 获取当前的时间 NSDate *d = [NSDate date]; 创建日期时间对象 NSLog输出是当前时间 格林时间 格式化显示时间 ...
随机推荐
- C++编程规范之11:隐藏信息
摘要: 不要泄密,不要公开提供抽象的实体的内部信息. 为了尽量减少操作抽象的调用代码和抽象的实现之间的依赖性,必须隐藏实现内部的数据.否则,调用代码就能够访问该信息,或者更糟,操作该信息,而原来应属于 ...
- Webbrowser加载Flash后方向键失效问题(用到了OLE接口,没有被处理就转发,够复杂的)
原文:http://blog.csdn.net/dropme/article/details/6253528 窗体上放一个ApplicationEvent控件,OnMessage事件中这么写 uses ...
- Swift - 选择框(UIPickerView)的用法
1,选择框可以让用户以滑动的方式选择值.示例如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- [计算机基础]关于实体( Entity )和模型( Model )
实体与模型的浅析 在日常开发过程中经常看到Entity,Model,DataModel,它们之间到底有什么异同?下面是我个人的一些理解. 一.Entity,Model,它们是什么? 维基百科描述: 实 ...
- 名字修饰约定extern "C"与extern "C++"浅析
所谓名字修饰约定,就是指变量名.函数名等经过编译后重新输出名称的规则. 比如源代码中函数名称为int Func(int a,int b),经过编译后名称可能为?Func@@YAHHH@Z.?Func@ ...
- Android开发之Sqlite的使用
在Android中存储数据可以用文件.数据库.网络,其中文件和数据库是最常用的,数据库我们常用的就是Sqlite,它是一种经量级的.嵌入式的关系型数据库:在android中当需要操作SQLite数据库 ...
- TD-SCDMA风雨20年:中国3G标准的由来以及国家通信战略
.国际电信标准是咋回事? 当年作为通信专业的学生,我曾长期困惑一个问题,为什么同一项通信技术总会有美国和欧洲两种国际标准?比如电话语音的数字化就有欧洲A律和美国u(谬)律两种. 学习后发现,两种标准的 ...
- web框架python
22.python笔记之web框架 一.web框架本质 1.基于socket,自己处理请求 #!/usr/bin/env python3 #coding:utf8 import socket de ...
- 浅谈 PHP 神盾的解密过程
原文:浅谈 PHP 神盾的解密过程 前些日子一个朋友丢了个shell给我,让我帮忙解密,打开源码看了下写着是 “神盾加密” , 牛逼闪闪的样子.百度下发现神盾是个很古老的东西,最后一次更新是在 201 ...
- Kendo UI开发教程(14): Kendo MVVM 数据绑定(三) Click
Click绑定可以把由ViewModel定义的方法不绑定到目标DOM的click事件.当点击目标DOM元素时触发ViewModel的对应方法.例如: 使用Click绑定 1 <div id=&q ...