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只替换一个“-”

时间: 2024-10-13 23:14:25

Date()日期创建的相关文章

Date日期时间相关

最近在封装一个关于时间函数的功能时,竟发现这些最基本的函数都有些生疏,于是进来来总结复习下,巩固自己记忆的同时,希望能帮助到需要的人 首先了解下日期对象相关的方法 var date = new Date();// 使用new+构造函数Date创建一个对象 console.log(date); // date内部相当于默认的调用了toString(): Tue Sep 19 2017 08:54:04 GMT+0800 (中国标准时间) console.log(date.toString());

JS内置对象-String对象、Date日期对象、Array数组对象、Math对象

一.JavaScript中的所有事物都是对象:字符串.数组.数值.函数... 1.每个对象带有属性和方法 JavaScript允许自定义对象 2.自定义对象 a.定义并创建对象实例 b.使用函数来定义对象,然后创建新的对象实例 二.JS内置对象-String 1.string对象 string对象用于处理已有的字符串 字符串可以使用单引号或者双引号 2.indexOf( )  在字符串中查找字符串,如果匹配成功返回首字母所在的位置,否则返回-1 3.match() 匹配成功,返回匹配成功的数组,

JavaScript Date日期对象以及日期格式化方法

前言 Date对象是javascript语言中内置的数据类型,用于提供日期和时间的操作接口.Date对象是在早期java中的java.util.Date类基础上创建的,为此,Date类型使用自UTC1970年1月1日0点开始经过的毫秒数来保存日期,它可以表示的时间范围是1970年1月1日0点前后的各1亿天. 静态方法 总共有3个静态方法:Date.now().Date.parse().Date.UTC() [Date.now()] ECMAScript5新增了now()方法,该方法返回当前时间距

JS中date日期初始化的5种方法

原文:JS中date日期初始化的5种方法 创建一个日期对象: 代码如下: var objDate=new Date([arguments list]); 参数形式有以下5种: 1)new Date("month dd,yyyy hh:mm:ss"); 2)new Date("month dd,yyyy"); 3)new Date(yyyy,mth,dd,hh,mm,ss); 在程序中我使用的第三种初始化方法,总是显示格式化的参数不正确,仔细看了一下一定要是整型的才可

DATE日期··MATH对象

1.Date日期 --Date 对象用于处理日期和时间. Date 对象的语法: var myDate=new Date() 2.Date 对象方法 eg: <style type="text/css"> #date{ width: 400px; height: 30px; } </style> <body> <input type="text" id="date"> <input type=

js转换Date日期格式

有时候做项目会用到js的date日期格式,因为Date()返回的格式不是我们需要的, Date()返回格式: Thu Mar 19 2015 12:00:00 GMT+0800 (中国标准时间) 而我们则需要这样的格式: 2015-3-19 12:00:00 除非是在后台处理好时间格式,然后在页面直接显示. 那如何用js格式化date日期值呢? 1.js方法返回值:2015-03-19 var formatDate = function (date) { var y = date.getFull

php date()日期时间函数详解

PHP(PHP培训 php教程 )中date()日期时间函数详解,需要的朋友可以参考下. 1,年-月-日 echo date('Y-m-j'); 2007-02-6 echo date('y-n-j'); 07-2-6 大写Y表示年四位数字,而小写y表示年的两位数字; 小写m表示月份的数字(带前导),而小写n则表示不带前导的月份数字. echo date('Y-M-j'); 2007-Feb-6 echo date('Y-m-d'); 2007-02-06 大写M表示月份的3个缩写字符,而小写m

IE下Date 日期不兼容问题

ie9+, chrome firefox opera下 string到Date 使用 new  Date("2014-06-01"); 都是ok的. 但在ie7, ie8下 返回NaN 用下面方法解决: function parseISO8601(dateStringInRange) { var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/, date = new Date(NaN), month, parts = isoExp.exec(dateS

javascript-封装Date日期类

迁移时间:2017年5月27日18:43:02 Author:Marydon (一)对日期进行格式化 //自定义Date日期类的format()格式化方法 <script type="text/javascript"> // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(H).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字