哎。

。这些人变得懒惰个月。。。经过以上撰写博客的工作

上周五测试报告的问题。上述日期的计算是有问题。两个日期之间的差异原创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仅更换“-”

最新文章

  1. nginx中将POST数据写到日志里面的正确方式
  2. gulp复制整个文件夹或文件到指定目录(包括拷贝单个文件)
  3. Spring AOP Schema aop:config、tx:advice
  4. HtmlParser
  5. fzu 2128 AC自动机
  6. shell脚本中>/dev/null的含义
  7. XCode中使用SVN 教程
  8. (转)wcf client与webservice通信(-)只修改配置文件而改变服务端
  9. svn笔记3
  10. Mysql innodb 间隙锁
  11. linux在线预览pdf文件开发思路
  12. 音视频编解码问题:javaCV如何快速进行音频预处理和解复用编解码(基于javaCV-FFMPEG)
  13. ctags-vim代码间快速跳转
  14. java中强,软,弱,虚引用 以及WeakHahMap
  15. Java虚拟机之Java内存区域
  16. 支付宝使用流程和踩坑小记(附Demo)
  17. vue单页面模板说明文档(3)
  18. zabbix添加对centos系统内存使用率百分比的监控
  19. django xss过滤
  20. 微服务SpringCloud无法进行服务消费

热门文章

  1. Xamarin.forms 自定义dropdownview控件
  2. win 7 设置防火墙例外的端口号, 让其域网中可以访问
  3. Python爬行动物(一):基本概念
  4. 基于Chrome开源提取的界面开发框架开篇--转
  5. How to get the source code of the chromium of the specified revision
  6. kill命令"-1"这个参数到底是杀进程还是reload?(转)
  7. Oracle控制文件操作
  8. nodejs启动守护程序pm2
  9. GNU libmicrohttpd 0.9.29 发布 - 开源中国社区
  10. 我在开发网站后得出的asp.Net网站优化总结