浅谈js-FCC算法Friendly Date Ranges(详解)


Posted in Javascript onApril 10, 2017

让日期区间更友好!

把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式。

易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1).

记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了。月份开始和结束日期如果在同一个月,则结束日期月份就不用写了。

另外, 如果开始日期年份是当前年份,且结束日期与开始日期小于一年,则开始日期的年份也不用写。

我的代码:

function makeFriendlyDates(arr) {
 //获得目前的年份
 var yearnow=(new Date()).getFullYear();
 //把传入的参数放入字符串数组,创建Date类型也可以
 var date1=arr[0].split("-");
 var date2=arr[1].split("-");
 //月份的英文表示
 var months=["January","February","March","April","May","June","July","August","September","October","November","December"];
 //初始化几个后面用到的数组
 var date1str="";
 var date2str="";
 var datearr=[];
 //给日期加后缀的函数
 function friendlydate(str){
  var str2num=Number(str);
  switch(str2num){
   case 1:
    str2num+="st";
    break;
   case 2:
    str2num+="nd";
    break;
   case 3:
    str2num+="rd";
    break;
   default:
    str2num+="th";
  }
  return str2num;
 }
 //date1的字符串表示大部分情况下都是需要年月日的。date2的如果不是在同年同月,大部分情况下都是需要月日的
 date1str=months[date1[1]-1]+" "+friendlydate(date1[2])+", "+date1[0];
 if(date1[1]===date2[1]&&date1[0]===date2[0]){
  date2str=friendlydate(date2[2]);
 }else{
  date2str=months[date2[1]-1]+" "+friendlydate(date2[2]);
 }
 //如果大于一年,date2加上年份;如果小于一年,而且date1的日期是今年,那么去掉date1的年份。
 if((date2[0]-date1[0]>1)||((date2[0]-date1[0]===1)&&(date2[1]-date1[1]>0))||((date2[0]-date1[0]===1)&&(date2[1]-date1[1]===0)&&date2[2]-date1[2]>=0)){
  date2str+=", "+date2[0];
 }else if(date1[0]==yearnow){
  date1str=date1str.slice(0,-6);
 }
 //把两个日期放在同一个数组里输出(如果是同年同月同日,代码里的date2str无用,所以代码是可以改善的)。
 datearr[datearr.length]=date1str;
 if(date1.toString()!==date2.toString()){
  datearr[datearr.length]=date2str;
 }
 return datearr;
}

特殊情况下,date2str是没用的,有空改善一下。

以上这篇浅谈js-FCC算法Friendly Date Ranges(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript下的keyCode键码值表
Apr 10 Javascript
javascript 特殊字符串
Feb 25 Javascript
使用JQUERY Tabs插件宿主IFRAMES
Jan 01 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
Jul 12 Javascript
微信小程序 使用picker封装省市区三级联动实例代码
Oct 28 Javascript
js实现简单的二级联动效果
Mar 09 Javascript
微信小程序实现日期格式化和倒计时
Nov 01 Javascript
如何换个角度使用VUE过滤器详解
Sep 11 Javascript
微信小程序 轮播图实现原理及优化详解
Sep 29 Javascript
原生js实现下拉选项卡
Nov 27 Javascript
vue 插槽简介及使用示例
Nov 19 Vue.js
javascript实现table单元格点击展开隐藏效果(实例代码)
Apr 10 #Javascript
js实现适配不同的屏幕大小
Apr 10 #Javascript
JS闭包可被利用的常见场景小结
Apr 09 #Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
Apr 08 #jQuery
作为老司机使用 React 总结的 11 个经验教训
Apr 08 #Javascript
详解angular element()方法使用
Apr 08 #Javascript
angularjs的select使用及默认选中设置
Apr 08 #Javascript
You might like
php adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
详解WordPress中添加和执行动作的函数使用方法
2015/12/29 PHP
php文件上传后端处理小技巧
2016/05/22 PHP
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
javascript修改浏览器title方法 JS动态修改浏览器标题
2017/11/30 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
对Python中DataFrame按照行遍历的方法
2018/04/08 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
详解Python给照片换底色(蓝底换红底)
2019/03/22 Python
python实现爬山算法的思路详解
2019/04/09 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
Python selenium自动化测试模型图解
2020/04/15 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
python上下文管理的使用场景实例讲解
2021/03/03 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
办公室主任岗位职责
2013/11/08 职场文书
设计师个人求职信范文
2014/02/02 职场文书
年终总结会主持词
2014/03/25 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
业务内勤岗位职责
2015/04/13 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
Python实现生活常识解答机器人
2021/06/28 Python
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技