关于时间的处理

计算机处理时间一直都是以时间戳的方式进行的, 并且以 格林尼治时间 1970/1/1 0:0:0 开始计算的:

var date = new Date(0);
date.toString() // Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间)
date.toGMTString() // Thu, 01 Jan 1970 00:00:00 GMT
date.toUTCString() // Thu, 01 Jan 1970 00:00:00 GMT

时间的格式化在前端是再正常不过的需求了, 所以会有类似的实现:

function formatDate(pattern, date) {
    date = new Date(date);

    function formatNumber(data, format) {
        data = data || 0;
        format = format.length;
        return format === 1 ? data : String(Math.pow(10, format) + data).slice(-format);
    }

    return pattern.replace(/([YMDhsmw])\1*/g, function(format) {
        switch (format.charAt()) {
            case 'Y':
                return formatNumber(date.getFullYear(), format);
            case 'M':
                return formatNumber(date.getMonth() + 1, format);
            case 'D':
                return formatNumber(date.getDate(), format);
            case 'h':
                return formatNumber(date.getHours(), format);
            case 'm':
                return formatNumber(date.getMinutes(), format);
            case 's':
                return formatNumber(date.getSeconds(), format);
            case 'w':
                return date.getDay();
        }
    });
}
  1. 最近在做需求的时候遇到 视频时长的问题, 后台返回的是 以秒为单位的数字, 要处理成 hh:mm:ss 这种格式, 在代码里搜了一下, 找到如下实现:function timeLen(time_len) { function fillZero(value) { return ('0' + value).slice(-2, 3); } return [ fillZero(Math.floor(time_len / 3600)), fillZero(Math.floor(time_len % 3600 / 60)), fillZero(time_len % 60) ].join(':'); }

借助于 formatDate, 也可以这么写:

function timeLenFormat(time_len) {
    return formatDate('hh:mm:ss', new Date(time_len * 1000 + (new Date).setHours(0, 0, 0, 0)));
};
  1. 还有一个需求, 要找 N个月以后, 比如 2015/8/31 的 3 个月以后就是 2015/11/30, 月份 +N 很简单, 但是月底要特殊处理, 你不可能输出 2015/11/31, 遇到月底的情况, 这个问题就变成了计算某个月份有多少天了, 平年闰年大小月什么的, 这么简单的问题怎么能想得这么复杂, 所幸 Date 对象支持设置超出范围的日期, 利用这一点: function getDateNextMonth(month, date) { date = date || new Date; var tmp = date.getDate(); date.setMonth(date.getMonth() + month); return tmp === date.getDate() ? date : new Date(date.setDate(1) - 8.64e7); }; 测试: http://yorts52.github.io/html/next-month.html
  2. 时区问题 用 (new Date).getTimezoneOffset() 修正 参考: http://yorts52.github.io/html/date.html, 顺便说一下, 这个页面当初是给测试用的
  3. 另外, 关于时间的处理, 有一个的库: https://github.com/moment/moment

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏漫漫深度学习路

tensorflow学习笔记(四十五):sess.run(tf.global_variables_initializer()) 做了什么?

当我们训练自己的神经网络的时候,无一例外的就是都会加上一句 sess.run(tf.global_variables_initializer()) ,这行代码的...

2146
来自专栏机器学习原理

示例三(3)——人物画像特征提取

2693
来自专栏李智的专栏

Python中对文件夹下的特定格式图像全部读取并转化为数组保存(也可转化为txt文件)

python下对图像进行批处理少不了读取文件夹下的全部图像,下面就以具体实例分享下对文件夹下的特定格式图像全部读取并转化为数组保存的代码,代码详解请见注释 ...

942
来自专栏生信小驿站

机器学习实战(2)之预测房价

数据预处理要点: 1.使用log(x+1)来转换偏斜的数字特征 -,这将使我们的数据更加正常 2.为分类要素创建虚拟变量 3.将数字缺失值(NaN)替换为...

963
来自专栏人工智能LeadAI

数据分析中的可视化-常见图形

import matplotlib.pyplot as plt import pandas as pd from pandas import Series, D...

1052
来自专栏GIS讲堂

说说地图中的聚类

虽然Openlayers4会有自带的聚类效果,但是有些时候是不能满足我们的业务场景的,本文结合一些业务场景,讲讲地图中的聚类展示。

793
来自专栏应兆康的专栏

100个Numpy练习【3】

翻译:YingJoy 网址: https://www.yingjoy.cn/ 来源: https://github.com/rougier/numpy-100...

35710
来自专栏小文博客

用C语言写贪吃蛇笔记-2

1095
来自专栏葡萄城控件技术团队

Spread for Windows Forms快速入门(9)---使用公式

Spread的公式计算引擎支持300多种内置函数,并支持通过内置函数和运算符来自定义公式。支持的函数包括日期、时间函数、工程计算函数、财务计算函数、逻辑函数、数...

1985
来自专栏深度学习之tensorflow实战篇

python下Matplotlib绘图案例与常见设置简介

首先一幅Matplotlib的图像组成部分介绍。 基本构成 在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个或者多个A...

3646

扫码关注云+社区