把常见的日期格式如: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. Java笔试题库之选题题篇【141-210题】

    141.Struts框架可以支持以下哪种程序开发语言? A.C B.C++ C.Java D.C# 解答:C 142.在Servlet处理请求的方式为. A.以进程的方式 B.以程序的方式 C.以线程 ...

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

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

  3. 【自然语言处理篇】--以NLTK为基础讲解自然语⾔处理的原理和基础知识

    一.前述 Python上著名的⾃然语⾔处理库⾃带语料库,词性分类库⾃带分类,分词,等等功能强⼤的社区⽀持,还有N多的简单版wrapper. 二.文本预处理 1.安装nltk pip install - ...

  4. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生. 串口调试助手是嵌入式开发里非常常用的小工具,市面上有非常多流行的串口调试工具,比如TeraTe ...

  5. Css-移动端适配总结

    前言 工作以后,大部分的业务工作都是基于移动端H5的,开发过程中学习了很多东西,遇到过许多问题,诸如rem\em\css px\device px等,本文纯属个人的归纳总结,如有问题,请指出亲喷~ P ...

  6. HttpClient封装方法

    //post请求 public static string PostRequest(string url, HttpContent data) { var handler = new HttpClie ...

  7. spring boot 2.0 ribbon 负载均衡配置

    1.pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId ...

  8. DevOps概述

    Devops概念 转载自 devops实践-开篇感想 DevOps(英文Development和Operations的组合)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和 ...

  9. 零基础学Python--------第11章 使用Python操作数据库

    第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...

  10. vue中v-text / v-html

    vue中v-text / v-html使用 <!DOCTYPE html> <html lang="en"> <head> <meta c ...