平时经常会使用到时间转换,组件库已经有很多组件可以自动生成时间类型了,但是底层的封装方法还是得有

获取当前时间 new Date()  或者自己拥有一个毫秒时间

方法如下

/**
* title: 时间、日期对象的格式化
* date:毫秒时间
* format:事件格式"yyyy-MM-dd hh:mm:ss",年-月-日 时:分:秒
* flag:计算剩余时间则为true(d天h时m分s秒)
**/
function dateFormat(date, format, flag) {
var o = {};
if (!flag) {
//eg:format="yyyy-MM-dd hh:mm:ss";
format = format || "yyyy-MM-dd hh:mm:ss";
date = new Date(Number(date));
o = {
"M+": date.getMonth() + 1, // month
"d+": date.getDate(), // day
"h+": date.getHours(), // hour
"m+": date.getMinutes(), // minute
"s+": date.getSeconds(), // second
"q+": Math.floor((date.getMonth() + 3) / 3), // quarter
"S": date.getMilliseconds()
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
} else { //剩余日期
format = format || '年-月-日';
var day = 0,
hour = 0,
minute = 0,
second = 0;
if (date > 0) {
date = date / 1000;
day = Math.floor(date / (60 * 60 * 24));
hour = Math.floor(date / (60 * 60)) - day * 24;
minute = Math.floor(date / 60) - day * 24 * 60 - hour * 60;
second = Math.floor(date) - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60;
}
o = {
"d+": day, // day
"h+": hour, // hour
"m+": minute, // minute
"s+": second //second
};
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return format;
}

衍生出一个追加时间的方法

/**
* title: 日期追加时间
* time:时间(yyyy/MM/dd,yyyy/MM/dd hh:mm:ss,yyyy-MM-dd hh:mm:ss,yyyy-MM-ddThh:mm:ss.Z)这里最后一种时间格式下方的第二种方法会有说明
* days:追加天数
* format:返回时间格式
* ms:毫秒、追加毫秒
**/
function dateAddTime(time, days, format, ms) {
days = Number(days) || 0;
if (time.indexOf('-') != -1 && time.indexOf('T') == -1) {
time = time.replace(/\-/g, '/');
}
var newTime;
if (ms) {
newTime = new Date(time).getTime() + Number(ms);
} else {
newTime = new Date(time).getTime() + days * 24 * 60 * 60 * 1000;
}
newTime = dateFormat(newTime, format);
return newTime;
}

在这里补充第二种时间转换的方式,这是对当前时间进行格式转换的方法,使用的是toISOString()方法去获取 拿到的时间格式是// YYYY-MM-DDTHH:mm:ss.sssZ,所以需要对拿到的格式做一下替换处理

function rTime(){
var dateTime = new Date();
return dateTime.toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}

这里会存在一个问题,网上谈论会出现8小时的时间差,说是用这个转换时间会丢失时区从而导致少8小时的原因,于是乎,改成了下面这样

function rTime(){
var dateTime = new Date(+new Date()+8*3600*1000);
return new Date(dateTime).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}

然后看到还有一种方法是直接给小时上+8,和上面的做法其实差不多

function rTime(){
var dateTime = new Date();
var hour = dateTime.getHours + 8;
dateTime.setHours(hour);
return new Date(dateTime).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
}

toISOString()方法借鉴了 toISOString()得到的日期时差8小时

封装的方法参照了公司开发中的封装方法

new Date时间格式转换方法的更多相关文章

  1. 按照相应的格式获取系统时间并将其转化为SQL中匹配的(date)时间格式

    在获取时间时需要对时间格式进行设置,此时就需要用到SimpleDateFormat 类 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM ...

  2. Extjs4 中date时间格式的问题

    在Grid中显示时间,后台传过来的是date格式的数据(PHP date('Y-m-d', time()),一般在Ext model中定义数据的类型和格式: {name:'birth', type:' ...

  3. Date时间格式的转换以及一些用法

    import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.u ...

  4. Ext.util.Format.date 时间格式的设置与转换

    Ext.util.Format.date 如下这段简单的代码:  var d = new Date(value.time); var s = Ext.util.Format.date(d, 'Y-m- ...

  5. Date时间格式比较大小

    方法一: 两个Date类型的变量可以通过compareTo方法来比较.此方法的描述是这样的:如果参数 Date 等于此 Date,则返回值 0:如果此 Date 在 Date 参数之前,则返回小于 0 ...

  6. mt-datetime-picker type="date" 时间格式 bug

    1.mint-ui 中 mt-datetime-picker 组件,存在日期格式 bug <!-- 日期选择器 --> <template> <div class=&qu ...

  7. python 正则匹配时间格式转换方法

    import re from datetime import datetime a = '2018年8月9日 10:10' s = re.findall('\d+',a) print(s) d = ' ...

  8. Java时间格式字符串与Date的相互转化

    目录 将Date转化为格式化字符串 时间格式字符串转化为Date @ 将Date转化为格式化字符串 将Date转化为格式化字符串是利用SimpleDateFormat类继承自 java.text.Da ...

  9. 时间格式_java

    @Test public void testDate(){ Date date=new Date(); System.out.println(date); /*日期格式*/ DateFormat df ...

随机推荐

  1. 第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗?

    第四十二个知识点:看看你的C代码为蒙哥马利乘法,你能确定它可能在哪里泄漏侧信道路吗? 几个月前(回到3月份),您可能还记得我在这个系列的52件东西中发布了第23件(可以在这里找到).这篇文章的标题是& ...

  2. WinForm应用程序的开机自启、记住密码,自动登录的实现

    一.思路: 1.开机自启,自然是需要用到注册表,我们需要把程序添加到电脑的注册表中去 2.记住密码,自动登录,开机自启,在页面的呈现我们都使用复选框按钮来呈现 3.数据持久化,不能是数据库,可以是sq ...

  3. Windows下安装配置Maven

    1.下载Maven 官方下载地址:http://maven.apache.org/download.cgi 目前Apache Maven最小版本为3.6.3, 下载适合Windows的安装包apach ...

  4. .net core中Grpc使用报错:Request protocol 'HTTP/1.1' is not supported.

    显然这个报错是说HTTP/1.1不支持. 首先,我们要知道,Grpc是Google开源的,跨语言的,高性能的远程过程调用框架,它是以HTTP/2作为通信协议的,所以当我启动启用一个服务作为Grpc的服 ...

  5. 使用sudo执行命令提示command not found

    笔记: 使用源码部署nginx的时候,使用sudo nginx提示command not found,但是直接使用nginx会导致权限问题: 这种情况应该是环境变量导致的,使用 env |grep P ...

  6. PHP DateTime类常用方法总结

    实例化: $date = new DateTime(); $date = new DateTime('2018-01-01'); $date = new DateTime('tomorrow'); $ ...

  7. Ubuntu18.04升级内核后修改grub文件启动顺序

    采坑:之前线上的服务器内核是4.15.0,后面有的服务跑不起来,说是要升级内核,于是就升级了,然后改了/etc/default/grub的启动顺序,改错了就启动不起来了,哈哈.后面多次尝试还是改成功了 ...

  8. mysql 5.7.29 在centos7.6下超简单的本地yum源安装与配置

    目录 生成yum源元数据 从网易镜像站下载MySQL 5.7 的 bundle包 创建文件 mysql-local.repo 执行yum install命令 生成yum源元数据 createrepo ...

  9. java 关于 重写、覆写、覆盖、重载 的总结【不想再傻傻分不清了】

    1.前言 有些东西,名称不同,其实就是一个东西,你说是扯淡不? 2.重写 重写,又叫覆写.覆盖 ,注解@Override,词义为推翻 , 用法特点是继承父类后,重写的父类方法名字.参数.返回值必须相同 ...

  10. Echart可视化学习(九)

    文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 官网找到类似实例, 适当分析,并且 ...