浅谈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笔记 String类replace函数的一些事
Sep 22 Javascript
原生js写的放大镜效果
Aug 22 Javascript
js拖拽一些常见的思路方法整理
Mar 19 Javascript
from表单多个按钮提交用onclick跳转不同action
Apr 24 Javascript
Jquery之Bind方法参数传递与接收的三种方法
Jun 24 Javascript
原生js实现复制对象、扩展对象 类似jquery中的extend()方法
Aug 30 Javascript
jquery中EasyUI使用技巧小结
Feb 10 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
Aug 18 Javascript
JS中Attr的用法详解
Oct 09 Javascript
vscode调试node.js的实现方法
Mar 22 Javascript
JavaScript监听一个DOM元素大小变化
Apr 26 Javascript
vue同个按钮控制展开和折叠同个事件操作
Jul 29 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php从数据库查询结果生成树形列表的方法
2015/04/17 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
Laravel框架模型的创建及模型对数据操作示例
2019/05/07 PHP
PHP safe_mode开启对于PHP系统函数有什么影响
2020/11/10 PHP
JS location几个方法小姐
2008/07/09 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
js导出txt示例代码
2014/01/14 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
nodejs基础之常用工具模块util用法分析
2018/12/26 NodeJs
vue-router 起步步骤详解
2019/03/26 Javascript
Vue实现滑动拼图验证码功能
2019/09/15 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
python中去空格函数的用法
2014/08/21 Python
python利用小波分析进行特征提取的实例
2019/01/09 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
python+mysql实现个人论文管理系统
2019/10/25 Python
Django之form组件自动校验数据实现
2020/01/14 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Python实现SMTP邮件发送
2020/06/16 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
用CSS3将你的设计带入下个高度
2009/08/08 HTML / CSS
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
英文简历中的自荐信范文
2013/12/14 职场文书
教师师德反思材料
2014/02/15 职场文书
集体婚礼策划方案
2014/02/22 职场文书
蛋糕店创业计划书
2014/05/06 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
2019朋友新婚祝福语精选
2019/10/10 职场文书
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记