FCC(ES6写法) Friendly Date Ranges
把常见的日期格式如:YYYY-MM-DD
转换成一种更易读的格式。
易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st
代替 1
)。
包含当前年份和相同月份的时候,makeFriendlyDates(["2017-01-02", "2017-01-05"])
应该返回 ["January 2nd","5th"]。
不包含当前年份,makeFriendlyDates(["2003-08-15", "2009-09-21"])
应该返回 ["August 15th, 2003", "September 21st, 2009"]
。
请考虑清楚所有可能出现的情况,包括传入的日期区间是否合理。对于不合理的日期区间,直接返回 undefined
即可。
思路:
就是几个条件判断一下就行了。写的有点繁琐,有更简便的请留言。
let makeFriendlyDates = arr => { const months = {"01" : "January","02" : "February","03" : "March", "04" : "April","05" : "May", "06" : "June", "07" : "July","08" : "August", "09" : "September","10" : "October", "11" : "November","12" : "December" }; let date1 = arr[0].split("-"); let date2 = arr[1].split("-"); let date = new Date(); let dateChange = day => { if(day[0] === "0"){ day = day.substr(1); if(day === "1") return day + "st"; //01->1st if(day === "2") return day + "nd"; //02->2nd if(day === "3") return day + "rd"; //03->3rd else return day + "th"; } else{ if(day.substr(1,1) === "1" && day.substr(0,1) === "2") return day + "st"; //21->21st if(day.substr(1,1) === "1" && day.substr(0,1) === "3") return day + "st"; //31->31st if(day.substr(1,1) === "2" && day.substr(0,1) === "2") return day + "nd"; //22->22nd if(day.substr(1,1) === "3" && day.substr(0,1) === "2") return day + "rd"; //23->23rd else return day + "th"; } }; let sameYear = (d1, d2) => { if(d2[0] - d1[0] > 1) return false; else{ if(d1[0] === d2[0]) return true; else{ //判断相减为1的时候 if(d2[1] > d1[1]) return false; if(d2[1] < d1[1]) return true; //判断在一年以内返回true else return d2[2] < d1[2] ? true : false; //判断是否在一年以内 } } }; if (sameYear(date1, date2)) { if(date1[0] === date2[0]){ if(date1[1] === date2[1]){ //月份相同 if(date1[2] === date2[2]){ //日期相同 let dateArr = []; dateArr.push(months[date1[1]] + " " + dateChange(date1[2]) + ", " + date1[0]); return dateArr; } else{ let dateArr = []; dateArr.push(months[date1[1]] + " " + dateChange(date1[2])); dateArr.push(dateChange(date2[2])); return dateArr; } } else{ //月份不同 let dateArr = []; dateArr.push(months[date1[1]] + " " + dateChange(date1[2])); dateArr.push(months[date2[1]] + " " + dateChange(date2[2])); return dateArr; } } if(date1[0] == date.getFullYear() - 1){ //开始年份为当前年份 let dateArr = []; dateArr.push(months[date1[1]] + " " + dateChange(date1[2])); dateArr.push(months[date2[1]] + " " + dateChange(date2[2])); return dateArr; } else{ let dateArr = []; dateArr.push(months[date1[1]] + " " + dateChange(date1[2]) + ", " + date1[0]); dateArr.push(months[date2[1]] + " " + dateChange(date2[2])); return dateArr; } } if (date2[0] > date1[0]){ //不同年且d2比d1大时 let dateArr = []; dateArr.push(months[date1[1]] + " " + dateChange(date1[2]) + ", " + date1[0]); dateArr.push(months[date2[1]] + " " + dateChange(date2[2]) + ", " + date2[0]); return dateArr; } } makeFriendlyDates(["2017-02-05", "2017-03-03"]);
如果有不明白的地方请留言,如果有更好更简便更优化的方法请留言,谢谢。
更多内容请访问我的个人博客:Bblog
FCC(ES6写法) Friendly Date Ranges的更多相关文章
- js-FCC算法Friendly Date Ranges
让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...
- Friendly Date Ranges 让日期区间更友好
把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推测出来的信息: 如果 ...
- Friendly Date Ranges
让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...
- Friendly Date Ranges-freecodecamp算法题目
Friendly Date Ranges 1.要求 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 ...
- React,React Native中的es5和es6写法对照
es6用在React中的写法总结: 在es6还没有完全支持到浏览器的阶段里,已经有很多技术人员开始用es6的写法来超前编程了,因为有转义es6语法的工具帮助下,大家才可大量使用.解析看看es6写法用在 ...
- 6-最基础的服务-es6写法
创建server.js 'use strict'; //http模块 var http = require('http'); //封装的方法 var handlers = require('./han ...
- react-native ES5与ES6写法对照表
转载链接:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/react-native-es5-and-es6-writing-tabl ...
- 【转】React Native中ES5 ES6写法对照
很多React Native的初学者都被ES6的问题迷惑:各路大神都建议我们直接学习ES6的语法(class Foo extends React.Component),然而网上搜到的很多教程和例子都是 ...
- JavaScript get set方法 ES5/ES6写法
网上鲜有get和set的方法的实例,在这边再mark一下. get和set我个人理解本身只是一个语法糖,它定义的属性相当于“存储器属性” 为内部属性提供了一个方便习惯的读/写方式 ES5写法 func ...
随机推荐
- 关于COOKIE在本地可以正常写入发布后不能写入浏览器的问题
看了一下cookie的属性设置如下: HTTP Cookie 设置了secure , 该cookie只能在HTTPS通道下被写入浏览器. HTTPS Cookie 设置了sec ...
- KVM 热迁移
最终我们迁移的目的就是: ·简化系统维护管理 ·高系统负载均衡 ·增强系统错误容忍度 ·优化系统电源管理 热迁移 又叫动态迁移,实时迁移,即虚拟机保存( save )/恢复( restore ):将整 ...
- kali linux 网络配置
/etc/init.d/networking restart service newworking restart ifdown eth0 ifup eth0 ifconfig down eth0 i ...
- 安装Spotlight On Unix监控Linux
1.安装Spotlight 一步一步按提示安装即可- 2.安装sysstat 在Linux上,必须安装sysstat包,用户才可以获取详细的磁盘I/O信息. 执行 rpm -qa |grep syss ...
- windows使用pyecharts报错 No module named 'pyecharts_snapshot
下载此文件后,使用命令 pip install pyecharts_snapshot-0.1.8-py2.py3-none-any.whl 安装完成即可 链接地址:https://pypi.org/p ...
- C#应用编程小例子-02-窗体最大化和最小化窗体大小
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- webpack打包优化之外部扩展externals的实际应用
目录 前言 externals定义 用法 string array object function regex 实际案例 打包时间 打包之后包的大小 浏览器加载 需要注意 参考 前言 使用vue-cl ...
- 重磅推出:AutoProject Studio 自动化项目生成器
AutoProject Studio 自动化项目生成器 核心架构图 AutoProject Studio 自动化项目生成器是一款基于C#.Net Framework 4.0为平台自主研发.专为软件设计 ...
- sqlserver2008 批量插入数据
private DataTable GetTableSchema() { DataTable dt = new DataTable(); dt.Columns.AddRange(new DataCol ...
- Web程序-----批量生成二维码并形成一张图片
需求场景:客户根据前台界面列表所选择的数据,根据需要的信息批量生成二维码并形成一张图片,并且每张图片显示的二维码数量是固定的,需要分页(即总共生成的二维码图片超出每页显示的需另起一页生成),并下载到客 ...