项目中的那些事---时间戳(一)

一、时间戳

简单讲,unix时间戳就是从1970-01-01开始所经过的秒数,什么时候获取时间戳,就是到那个时间点所经历的秒数。

二、JavaScript获取时间戳

根据时间戳的定义,可以使用javascript中的几个方法来获取系统当前的时间戳:

1、getTime()

w3c school的解释如下:

根据上面的定义,我们可以获取系统当前的时间戳:

var timeStamp1 = new Date().getTime();
console.info(timeStamp1);输出:1524662952173

2、parse()

根据上面的解释,parse方法返回的是指定日期和时间到1970年1月1日的毫秒数,所以只要将日期指定为系统当前时间,就能获取系统当前的时间戳。

var timeStamp2 = Date.parse(new Date());
console.info(timeStamp2);输出:1524662952000

3、valueOf()

  

该方法返回的是Date对象的原始值,且和getTime返回相同的值,所以只要Date对象为系统当前时间,就能获取系统当前的时间戳

var timeStamp3 = (new Date()).valueOf();
console.info(timeStamp3);输出:1524662952176

以上是获取系统当前时间的时间戳,如果要获取指定时间的时间戳,只需要设置指定日期,然后用对应的日期对象进行操作即可,不再赘述。

从上面的结论可以看出,通过parse方法获取的时间戳后三位都是0,如果用更多的数据测试,都会发现该方法返回的时间戳没有其他两种方法精确,

因为其后三位始终是0.

二、将时间戳转化为日期

上面介绍的是获取时间戳,也就是日期转时间戳的方法,再来学习一下时间戳转日期的方法。

转成日期的方法也很简单,只要将时间戳传给Date即可,然后格式化成想要的格式,如YYYY-MM-DD hh:mm:ss

值得注意的一点是,在转日期之前要先判断时间戳是否是13位,如果不是13位,需要将不够的几位在低位用0代替,

例如:时间戳是1234567891  则在传给Date()之前要转成1234567891000

/**
	 * 将unix时间戳转化成日期格式
	 */
	function timestamp2date(timestamp){
		var date = new Date(timestamp);
		var strLen = timestamp.toString().length;
		//判断时间戳是否不足13位,不足时低位补0,即乘以10的所差位数次方
		if( strLen < 13){
			var sub = 13 - strLen;
			sub = Math.pow(10,sub);//计算10的n次方
			date = new Date(timestamp*sub);
		}
		var y = date.getFullYear()+‘-‘;
		var M = (date.getMonth()+1 < 10 ? ‘0‘+(date.getMonth()+1) : date.getMonth()+1) + ‘-‘;
		var d = date.getDate() + ‘ ‘;
		var h = date.getHours() + ‘:‘;
	    var m = date.getMinutes() + ‘:‘;
		var s = date.getSeconds();

		return y+M+d+h+m+s;
	}

	var ts = timestamp2date(1234567891);
	console.info(ts);        输出结果:2009-02-14 7:31:31
	var ts = timestamp2date(1234567891000);
	console.info(ts);        输出结果:2009-02-14 7:31:31

为了验证上面的结论,将补0部分去掉,结果如下:

/**
     * 将unix时间戳转化成日期格式
     */
    function timestamp2date(timestamp){
        var date = new Date(timestamp);
        var strLen = timestamp.toString().length;
        //判断时间戳是否不足13位,不足时低位补0,即乘以10的所差位数次方
        /* if( strLen < 13){
            var sub = 13 - strLen;
            sub = Math.pow(10,sub);//计算10的n次方
            date = new Date(timestamp*sub);
        } */
        var y = date.getFullYear()+‘-‘;
        var M = (date.getMonth()+1 < 10 ? ‘0‘+(date.getMonth()+1) : date.getMonth()+1) + ‘-‘;
        var d = date.getDate() + ‘ ‘;
        var h = date.getHours() + ‘:‘;
        var m = date.getMinutes() + ‘:‘;
        var s = date.getSeconds();

        return y+M+d+h+m+s;
    }

    var ts = timestamp2date(1234567891);
    console.info(ts);   输出结果:1970-01-15 14:56:7
    var ts = timestamp2date(1234567891000);
    console.info(ts);   输出结果:2009-02-14 7:31:31

以上就是JavaScript中日期和时间戳的转化,如有错误之处,感谢指正!

原文地址:https://www.cnblogs.com/hellowhy/p/8878046.html

时间: 2024-10-13 10:03:39

项目中的那些事---时间戳(一)的相关文章

项目中的那些事---Java反射的应用

最近工作中遇到一个这样的问题: 为某个项目中的所有接口做一个测试工具,使用java Swing技术,该项目有不同的版本,不是所有版本中的接口都是相同的,而我做的工具需要兼容所有版本. 于是就引入了这样一个问题: 有些接口如果在部分版本中不存在,那么通过界面执行这个操作的时候就会报错,所以为了兼容所有版本,就要在方法调用之前考虑方法是否存在,同时为了不在编译时抛异常,在调用方法时 也需要通过反射来调用,具体实现如下: 一.使用反射判断方法是否存在 1 /** 2 * 判断方法是否存在 3 * 4

项目中的那些事---踩过的数据库坑

今天来说一下我在做项目时踩到的postgresql数据库的坑....... 数据库:postgresql 工具:Navicat 诱因:设置数据库表的主键为自动增长 之前做项目时数据库是别人设计的,我只操作数据库表.今天在navicat工具中创建数据表时想让主键(id)自动增长,就将id的类型设置成int2,因为我见别人的表中自动增长的字段类型都是int2, 不料在插入数据时却提示主键为空(主键一般都是非空),如下所示: 我就纳闷了,为什么别人设置成int2可以自动增长,我就不行.于是经过一番百度

项目中的那些事---PHP函数

总结工作中遇到的php函数: 1.查找:strpos("str", "substr"): 查找substr字符串在str字符串中出现的位置 第一个参数是:被查找的字符串 第二个参数是:要查找的字符串 1 $str = "my name is php"; 2 var_dump(strpos($str,"is")); 3 4 运行结果为: 5 int(8) 2.把字符串打散为字符:explode(' ','str'); 第一个参数

工作那些事(二十七)项目经理在项目中是什么角色?

项目经理在项目中是什么角色? 有人说,项目经理就是一个求人的差事,你是在求人帮你做事.这样的说法在中国特色下,有一定道理.可是,我不全然认同.我认为项目经理室一个为项目组人员服务的角色.更像是后勤保障部长的角色. 有人说.项目经理就是一个与人扯皮的差事,你要不断的与开发.产品.測试等之间沟通.协调. 有人说,有人的地方,就有江湖,有江湖的地方,就有规矩.确实,在做项目的时候,有的人是为了完毕功能,有的人是为了学到东西,有的人是为了混日子. 哪种人最适合你的项目?你的项目.有没有被所谓的专家坑过?

vue项目中遇到的那些事。

前言 有好几天没更新文章了.这段实际忙着做了一个vue的项目,从 19 天前开始,到今天刚好 20 天,独立完成. 做vue项目做这个项目一方面能为工作做一些准备,一方面也精进一下技术. 技术栈:vue2 + vuex + vue-router + webpack + ES6/7 + element-ui + vue-baidu-map + i18n + vue-awesome-swiper 做项目时总是有一些思考和踩过的坑,对以后有一定的帮助,今天就来写写做vue项目遇到的那些事. 假如你正准

关于java项目与web项目中lib包的那点事

一.在java项目中如何引入外部jar包:1.在我们的java项目下新建一个lib文件夹:2.将我们需要引入的jat包复制到lib文件夹下:3.选中我们lib包下的jar,右键选择Build Path --Add to Build Path: 4.jar成功的添加到Referenced Libraries中. 这样做的目的主要是为了防止绝对路径的引用导致我们的工程依赖本工程目录下的jar包文件. 二.web项目,新建之时会默认出现lib包,只要把相关jar包复制到lib文件下,理论上会自动加载到

在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)

最近公司的大厅要重做,我协助主程一起制作新大厅和新框架,前面制作的编辑器也派上了用场.等全部功能做完后我会再写一个复盘,这两天主程在忙于写热更新的功能,所以把接入分享SDK功能的任务交给了我,ShareSDK官网的文档比较分散,而且关于Unity的文档比较简略,所以还是有不少的坑.写篇博客分享一下,并加强理解记忆. 第一步,先去ShareSDK的官网下载最新版本的ShareSDK(完全免费).地址:http://www.mob.com/ 我们选择ShareSDK For Unity3D,页面会直

如何在程序开发项目中选择合适的 JavaScript 框架,节省时间和成本的9款极佳的JavaScript框架介绍

从技术上来看,iOS,Android 和 Windows Phone 上的移动应用是使用不同的程序语言开发的,iOS 应用使用 Objective-C,Android 应用使用 Java,而 Windows Phone 应用使用 .NET. .随着 JavaScript,CSS 和 HTML 知识技能的提升,相信你也可以构建一个超赞的移动应用.在这篇博客里,我们将会介绍一些极好的 JavaScript 移动应用程序开发框架. 说到网络开发,就不得不说 JavaScript,这是一款很有前途的程序

iOS-旧项目中手动内存管理(MRC)转ARC

在ARC之前,iOS内存管理无论对资深级还是菜鸟级开发者来说都是一件很头疼的事.我参 加过几个使用手动内存管理的项目,印象最深刻的是一个地图类应用,由于应用本身就非常耗内存,当时为了解决内存泄露问题,每周都安排有人值班用 Instruments挨个跑功能,关键是每次都总能检查出来不少.其实不管是菜鸟级还是资深级开发者都避免不了写出内存泄露的代码,规则大家都懂,可是 天知道什么时候手一抖就少写了个release? 好在项目决定转成ARC了,下面将自己转换的过程和中间遇到的问题写出来和大家共享,希望