浅谈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活用事件触发对象动作
Aug 10 Javascript
javascript中的一些注意事项 更新中
Dec 06 Javascript
JS操作Cookie写入和读取实例代码
Oct 20 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
Feb 19 Javascript
基于jQuery的网页影音播放器jPlayer的基本使用教程
Mar 08 Javascript
javascript基本语法
May 31 Javascript
jQuery动态加载css文件实现方法
Jun 15 Javascript
深入讲解xhr(XMLHttpRequest)/jsonp请求之abort
Jul 26 Javascript
关于meta viewport中target-densitydpi属性详解(推荐)
Aug 18 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
May 03 Javascript
使用webpack搭建vue环境的教程详解
Dec 31 Javascript
Vue监视数据的原理详解
Feb 24 Vue.js
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
将RTF格式的文件转成HTML并在网页中显示的代码
2006/10/09 PHP
PHP安装攻略:常见问题解答(一)
2006/10/09 PHP
wiki-shan写的php在线加密的解密程序
2008/09/07 PHP
php获取post中的json数据的实现方法
2011/06/08 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
PHP 数组遍历foreach语法结构及实例
2016/06/13 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
微信小程序 scroll-view实现上拉加载与下拉刷新的实例
2017/01/21 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
2017/03/13 Javascript
jQuery源码解读之extend()与工具方法、实例方法详解
2017/03/30 jQuery
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
如何在vue项目中嵌入jsp页面的方法(2种)
2020/02/06 Javascript
用python实现k近邻算法的示例代码
2018/09/06 Python
详解python:time模块用法
2019/03/25 Python
解决python3中的requests解析中文页面出现乱码问题
2019/04/19 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
简单介绍一下pyinstaller打包以及安全性的实现
2020/06/02 Python
巴塞罗那观光通票:Barcelona Pass
2019/10/30 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
八一建军节演讲稿
2014/09/10 职场文书
临时用工协议书范本
2014/10/29 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
综合素质评价思想道德自我评价
2015/03/09 职场文书
特此通知格式
2015/04/27 职场文书
国富论读书笔记
2015/06/26 职场文书
党组织结对共建协议书
2016/03/23 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers