浅谈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 面向对象(二)封装代码
May 23 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
使用jQuery制作基础的Web图片轮播效果
Apr 22 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
微信小程序组件 marquee实例详解
Jun 23 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
Apr 25 Javascript
vue生成token并保存到本地存储中
Jul 17 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
Oct 12 Javascript
为什么要使用Vuex的介绍
Jan 19 Javascript
vue 兄弟组件的信息传递的方法实例详解
Aug 30 Javascript
JavaScript中数组去重的5种方法
Jul 04 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
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
2012/06/27 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
javascript document.referrer 用法
2009/04/30 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
jquery图片轮播插件仿支付宝2013版全屏图片幻灯片
2014/04/03 Javascript
js获取字符串最后一位方法汇总
2014/11/13 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
详解VueJS 数据驱动和依赖追踪分析
2017/07/26 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
vue实现将一个数组内的相同数据进行合并
2019/11/07 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
使用Python实现文字转语音并生成wav文件的例子
2019/08/08 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
python-地图可视化组件folium的操作
2020/12/14 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
lookfantastic荷兰:在线购买奢华护肤、护发和化妆品
2018/11/27 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
宝信软件JAVA工程师面试经历
2012/08/19 面试题
仓库规划计划书
2014/04/28 职场文书
师德师风演讲稿
2014/05/05 职场文书
地质工程专业毕业生求职信
2014/08/08 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
商场收银员岗位职责
2015/04/07 职场文书
导游词之苏州寒山寺
2019/12/05 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
Spring中bean集合注入的方法详解
2022/07/07 Java/Android
MySQL事务的隔离级别详情
2022/07/15 MySQL