浅谈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 常见对象类创建代码与优缺点分析
Dec 07 Javascript
javascript中删除指定数组中指定的元素的代码
Feb 12 Javascript
js相册效果代码(点击创建即可)
Apr 16 Javascript
深入探寻javascript定时器
Jan 02 Javascript
jQuery插件slides实现无缝轮播图特效
Apr 17 Javascript
JS实现超简单的仿QQ折叠菜单效果
Sep 21 Javascript
JS实现的3D拖拽翻页效果代码
Oct 31 Javascript
JS JSOP跨域请求实例详解
Jul 04 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
ECMAscript 变量作用域总结概括
Aug 18 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
Layui多选只有最后一个值的解决方法
Sep 02 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
php桌面中心(三) 修改数据库
2007/03/11 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
新页面打开实际尺寸的图片
2006/08/25 Javascript
javascript实现 在光标处插入指定内容
2007/05/25 Javascript
input 高级限制级用法
2009/03/26 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
Javascript技术难点之apply,call与this之间的衔接
2015/12/04 Javascript
Node.js 应用跑得更快 10 个技巧
2016/04/03 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
最原始的jQuery注册验证方式
2016/10/11 Javascript
vue.js实现含搜索的多种复选框(附源码)
2017/03/23 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
Vue+Typescript中在Vue上挂载axios使用时报错问题
2019/08/07 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
python使用正则表达式分析网页中的图片并进行替换的方法
2015/03/26 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
matplotlib中legend位置调整解析
2017/12/19 Python
python 按不同维度求和,最值,均值的实例
2018/06/28 Python
Python hashlib模块实例使用详解
2019/12/24 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
PurCotton全棉时代官网:100%天然棉花生产的生活护理用品
2016/11/18 全球购物
《李广射虎》教学反思
2014/04/27 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
网络营销计划
2015/01/17 职场文书
房地产销售员岗位职责
2015/04/11 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
golang生成vcf通讯录格式文件详情
2022/03/25 Golang