浅谈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 相关文章推荐
fix-ie5.js扩展在IE5下不能使用的几个方法
Aug 20 Javascript
JavaScript window.document的属性、方法和事件小结
Oct 24 Javascript
js获取网页高度(详细整理)
Dec 28 Javascript
Linux下使用jq友好的打印JSON技巧分享
Nov 18 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 Javascript
Bootstrap table分页问题汇总
May 30 Javascript
移动端 一个简单易懂的弹出框
Jul 06 Javascript
JavaScript数据结构之栈实例用法
Jan 18 Javascript
微信小程序结合Storage实现搜索历史效果
May 18 Javascript
vue-socket.io接收不到数据问题的解决方法
May 13 Javascript
vue使用nprogress加载路由进度条的方法
Jun 04 Javascript
jQuery实现图片切换效果
Oct 19 jQuery
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里得到前天和昨天的日期的代码
2007/08/16 PHP
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
thinkPHP实现签到功能的方法
2017/03/15 PHP
php7安装yar扩展的方法详解
2017/08/03 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
JavaScript各类型的关系图解
2015/10/16 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
关于jQuery库冲突的完美解决办法
2017/05/20 jQuery
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
JQuery Ajax执行跨域请求数据的解决方案
2018/12/10 jQuery
Vue $mount实战之实现消息弹窗组件
2019/04/22 Javascript
js中比较两个对象是否相同的方法示例
2019/09/02 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
Python去除字符串前后空格的几种方法
2019/03/04 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
最新教师自我评价分享
2013/11/12 职场文书
金融学专业大学生职业生涯规划
2014/03/07 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
2014年公司工作总结
2014/11/22 职场文书
委托函范文
2015/01/29 职场文书
python实现简单倒计时功能
2021/04/21 Python
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
Java并发编程必备之Future机制
2021/06/30 Java/Android
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android
浅谈Node的内存泄露问题
2022/05/06 NodeJs