Date()日期创建
来源:互联网 发布:网络暴力调查问卷 编辑:程序博客网 时间:2024/05/17 03:38
哎。。这些个月人变懒了。。。以后多写写博客才行
上周五测试报了个问题,说日期计算出现了问题。原两日期相差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()日期创建
- Date日期创建
- Date 日期
- date 日期
- java date 日期 date
- Java_按照指定的日期创建 Date对象
- JavaScript日期对象使用总结 javascript Date日期对象的创建
- 日期Date格式判断
- date命令(显示日期)
- 日期输入Date
- Date 日期比较
- php 日期函数 date()
- actionscript3 Date(日期)
- javascript date日期
- Date 计算日期
- php 日期函数 date
- JavaScript Date(日期)对象
- javascript Date日期对象
- 网络流
- zabbix_sendmail.py
- Android-Universal-Image-Loader 图片加载库 详细分析
- C++隐式的类类型转换和类型转换运算符
- py2exe使用教程(六)——关于压缩文件
- Date()日期创建
- 织梦DedeCMS增加自定义文档属性四部曲
- jQuery中join方法
- android 根据原理分析ListView滑动checkbox状态被清除 不保存
- nodejs扩展log4js正则匹配区分文件(方案一)
- 指针和引用
- iOS UIPageControl
- cocostudio 2.0版本爬坑手记
- 第10周项目1(3)getchar()接受字符数据规律