把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式。

易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1).

记住不要显示那些可以被推测出来的信息: 如果一个日期区间里结束日期与开始日期相差小于一年,则结束日期就不用写年份了;在这种情况下,如果月份开始和结束日期如果在同一个月,则结束日期月份也不用写了。

另外, 如果开始日期年份是当前年份,且结束日期与开始日期小于一年,则开始日期的年份也不用写。

function makeFriendlyDates(arr) {   //当前年份2017
var arr1 = arr[0].split("-");
var arr2 = arr[1].split("-");var month = { //月份
"01":"January",
"02":"February",
"03":"March",
"04":"April",
"05":"May",
"06":"June",
"07":"July",
"08":"August",
"09":"September",
"10":"October",
"11":"November",
"12":"December"
};
function getDay(day){ //日期结尾
if(day == "1" || day == "21" || day == "31"){
return "st";
}else if(day == "2" || day == "22"){
return "nd";
}else if(day == "3" || day == "23"){
return "rd";
}else {
return "th";
}
}
function getD(day){ //将01、02等改为1、2等 添加结尾
var n;
if(day / 10 < 1){
n = day % 10;
}else{
n = day;
}
return n + getDay(n);
}
function getDa(year, mon, day){ //拼接
var dArr;
if(!mon && !year){
dArr = getD(day);
}else if(!year){
dArr = month[mon] +" " + getD(day);
}else{
dArr = month[mon] +" " + getD(day)+ ", " + year;
}
return dArr;
}
var cha = arr2.join("") - arr1.join("");
if(cha < 0){ //不合理
return undefined;
}else if(cha > 0){ //不是同一天
if(cha < 10000){ //相差1年以内
if(arr1[0] == 2017){ //1年以内且开始年份为当前年份
if(arr1[1] == arr2[1]){ //月份相同
return [getDa("", arr1[1], arr1[2]), getDa("", "", arr2[2])];
}else{ //月份不同
return [getDa("", arr1[1], arr1[2]), getDa("", arr2[1], arr2[2])];
}
}else{ //1年以内且开始年份非当前年份
return [getDa(arr1[0], arr1[1], arr1[2]), getDa("", arr2[1], arr2[2])];
}
}else{ //相差大于1年
return [getDa(arr1[0], arr1[1], arr1[2]), getDa(arr2[0], arr2[1], arr2[2])];
}
}else{ //是同一天
return [getDa(arr1[0], arr1[1], arr1[2])];
}
}
makeFriendlyDates(["2001-12-20", "2001-12-20"]);

Friendly Date Ranges 让日期区间更友好的更多相关文章

  1. js-FCC算法Friendly Date Ranges

    让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...

  2. Friendly Date Ranges

    让日期区间更友好! 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 记住不要显示那些可以被推 ...

  3. FCC(ES6写法) Friendly Date Ranges

    把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 1). 包含当前年份和相同月份的时候,makeFri ...

  4. Friendly Date Ranges-freecodecamp算法题目

    Friendly Date Ranges 1.要求 把常见的日期格式如:YYYY-MM-DD 转换成一种更易读的格式. 易读格式应该是用月份名称代替月份数字,用序数词代替数字来表示天 (1st 代替 ...

  5. Sql 获取日期区间

    获取制定日期区间 declare @d as date declare @d2 as date set @d = '2014-06-03' set @d2 ='2014-06-10' ),datead ...

  6. JS获取当前时间到30天之后的日期区间

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  7. Java判断一个日期是否在下周日期区间

    Java实现判断一个日期是否在下周日期区间的方法 /** * 判断输入的日期是否在下周区间 * @return * @author nemowang */ public static boolean ...

  8. 从零开始学习PYTHON3讲义(四)让程序更友好

    <从零开始PYTHON3>第四讲 先看看上一讲的练习答案. 程序完成的是功能,功能来自于"程序需求"("需求"这个词忘记了什么意思的去复习一下第二讲 ...

  9. java成神之——date和calendar日期的用法

    date和calendar日期的用法 util的data转换成sql的data 创建Date对象 格式化 Instant ChronoUnit LocalTime LocalDate LocalDat ...

随机推荐

  1. Promise探讨

    一.前言 大家都知道JavaScript一大特点就是单线程,为了不阻塞主线程,有些耗时操作(比如ajax)必须放在任务队列中异步执行.传统的异步编程解决方案之一回调,很容易产生臭名昭著的回调地狱问题. ...

  2. Docker & ASP.NET Core (2):定制Docker镜像

    上一篇文章:把代码连接到容器 Dockerfile 在Docker的世界里,我们可以通过一个叫Dockerfile的文件来创建Docker镜像,随后可以运行容器. Dockerfile就是一个文本文件 ...

  3. 【神经网络篇】--RNN递归神经网络初始与详解

    一.前述 传统的神经网络每个输入节点之间没有联系, RNN (对中间信息保留): 由图可知,比如第二个节点的输入不仅依赖于本身的输入U1,而且依赖上一个节点的输入W0,U0,同样第三个节点依赖于前两个 ...

  4. python接口自动化(一)--什么是接口、接口优势、类型(详解)

    简介 经常听别人说接口测试,接口测试自动化,但是你对接口,有多少了解和认识,知道什么是接口吗?它是用来做什么的,测试时候要注意什么?坦白的说,笔者之前也不是很清楚.接下来先看一下接口的定义. 定义 接 ...

  5. dotnet core开源博客系统XBlog介绍

    XBlog是dotnet core平台下的个人博客开源系统,它只需要通过Copy的方式即可以部署到Linux和windows系统中:如果你有安全证书那只需要简单配置一下即可提供安全的Https服务.接 ...

  6. [开源]基于Log4Net简单实现KafkaAppender

    背景 基于之前基于Log4Net本地日志服务简单实现 实现本地日志服务,但是随着项目开发演进,本地日志服务满足不了需求,譬如在预发布环境或者生产环境,不可能让开发人员登录查看本地日志文件分析. Kaf ...

  7. Asp.Net.Identity认证不依赖Entity Framework实现方式

    Asp.Net.Identity为何物请自行搜索,也可转向此文章http://www.cnblogs.com/shanyou/p/3918178.html 本来微软已经帮我们将授权.认证以及数据库存储 ...

  8. TensorRT学习总结

    TensorRT是什么 建议先看看这篇https://zhuanlan.zhihu.com/p/35657027 深度学习 训练 部署 平常自学深度学习的时候关注的更多是训练的部分,即得到一个模型.而 ...

  9. 无需***,轻松提速 Github

    无需***,轻松提速 Github 众所周知,Github 是全球程序员最喜欢访问的网站之一,但是在国内,会很容易出现一个水土不服的局面 -- 下载不了(稍微大一点中途就报错了),下载速度慢 .... ...

  10. oracle学习笔记(三) DCL 数据控制语言与 DDL 数据定义语言

    DCL 数据控制语言 Data control language 之前说过的授权和收权利语句 grant, revoke DDL 数据定义语言 Data define language create ...