浅谈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 垃圾回收机制分析
Oct 10 Javascript
jquery ajax post提交数据乱码
Nov 05 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
Mar 10 Javascript
easyui Droppable组件实现放置特效
Aug 19 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
Sep 14 Javascript
JS获取input file绝对路径的方法(推荐)
Aug 02 Javascript
jQuery实现底部浮动窗口效果
Sep 07 Javascript
结合mint-ui移动端下拉加载实践方法总结
Nov 08 Javascript
通过jquery获取上传文件名称、类型和大小的实现代码
Apr 19 jQuery
JavaScript变量声明var,let.const及区别浅析
Apr 23 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 Javascript
基于JavaScript实现简单抽奖功能代码实例
Oct 20 Javascript
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实现ping
2006/10/09 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
浅谈php中的访问修饰符private、protected、public的作用范围
2016/11/20 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
Aster vs Newbee BO3 第三场2.18
2021/03/10 DOTA
超棒的javascript页面顶部卷动广告效果
2007/12/01 Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
2015/08/14 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
使用nodejs下载风景壁纸
2017/02/05 NodeJs
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
js正则相关知识点专题
2018/05/10 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
Python实现115网盘自动下载的方法
2014/09/30 Python
Python骚操作之动态定义函数
2019/03/26 Python
Python 使用matplotlib模块模拟掷骰子
2019/08/08 Python
Python制作词云图代码实例
2019/09/09 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
python和go语言的区别是什么
2020/07/20 Python
python 多线程死锁问题的解决方案
2020/08/25 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
python os.rename实例用法详解
2020/12/06 Python
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
预备党员转正思想汇报
2014/01/12 职场文书
高三毕业寄语
2014/04/10 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
应届毕业生自荐信
2015/03/04 职场文书
医学会议开幕词
2016/03/03 职场文书
小程序实现文字循环滚动动画
2021/06/14 Javascript
Python并发编程实例教程之线程的玩法
2021/06/20 Python