浅谈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 相关文章推荐
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
JavaScript中的replace()方法使用详解
Jun 06 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 Javascript
Web前端框架bootstrap实战【第一次接触使用】
Dec 28 Javascript
微信小程序使用navigateTo数据传递的实例
Sep 26 Javascript
js 开发之autocomplete="off"在chrom中失效的解决办法
Sep 28 Javascript
element-ui中的select下拉列表设置默认值方法
Aug 24 Javascript
Node.js npm命令运行node.js脚本的方法
Oct 10 Javascript
说说Vuex的getters属性的具体用法
Apr 15 Javascript
javascript实现导航栏分页效果
Jun 27 Javascript
vue.js购物车添加商品组件的方法
Sep 17 Javascript
js实现淘宝浏览商品放大镜功能
Oct 28 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制作静态网站的模板框架(一)
2006/10/09 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
js判断浏览器的比较全的代码
2007/02/13 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
2017/04/11 Javascript
JavaScript 有用的代码片段和 trick
2018/02/22 Javascript
vue-cli 3.x配置跨域代理的实现方法
2019/04/12 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
python中函数传参详解
2016/07/03 Python
Python3 queue队列模块详细介绍
2018/01/05 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
Python爬虫小技巧之伪造随机的User-Agent
2018/09/13 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
python保留小数位的三种实现方法
2020/01/07 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
C#实现启动一个进程
2016/10/01 面试题
JAVA程序员面试题
2012/10/03 面试题
考博自荐信
2013/10/25 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
家长对孩子的评语
2014/04/18 职场文书
关于学习的演讲稿
2014/05/10 职场文书
十佳家长事迹材料
2014/08/26 职场文书
2014个人年度工作总结
2014/12/15 职场文书
电话营销开场白
2015/05/29 职场文书
员工离职证明范本
2015/06/12 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书
Docker下安装Oracle19c
2022/04/13 Servers