javascript技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript技巧 > JavaScript时间戳转为日期格式

JavaScript将时间戳转换为日期格式的多种转换方法

作者:yingjuxia.com

在 JavaScript 中,将时间戳转换为日期格式是一个常见需求,可以通过原生 Date 对象、日期格式化方法或第三方库现,以下是详细的中文讲解,介绍多种转换方法,包含代码示例、使用场景和注意事项,需要的朋友可以参考下

1.时间戳简介

2.转换方法

方法 1:使用原生Date对象

// 毫秒时间戳
const timestamp = 1630454400000; // 2021-09-01 00:00:00 UTC
const date = new Date(timestamp);

// 提取日期部分
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需 +1
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');

// 格式化
const formattedDate = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
console.log(formattedDate); // 输出: 2021-09-01 00:00:00
const utcDate = `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(2, '0')}-${String(date.getUTCDate()).padStart(2, '0')}`;
console.log(utcDate); // 输出: 2021-09-01

方法 2:使用toLocaleString()

const timestamp = 1630454400000;
const date = new Date(timestamp);

// 默认本地化格式
console.log(date.toLocaleString('zh-CN')); // 输出: 2021/9/1 08:00:00(中国时区)

// 自定义格式
const options = {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
};
console.log(date.toLocaleString('zh-CN', options)); // 输出: 2021-09-01 08:00:00

方法 3:自定义格式化函数

function formatDate(timestamp, format = 'YYYY-MM-DD HH:mm:ss') {
    const date = new Date(timestamp);
    const map = {
        'YYYY': date.getFullYear(),
        'MM': String(date.getMonth() + 1).padStart(2, '0'),
        'DD': String(date.getDate()).padStart(2, '0'),
        'HH': String(date.getHours()).padStart(2, '0'),
        'mm': String(date.getMinutes()).padStart(2, '0'),
        'ss': String(date.getSeconds()).padStart(2, '0')
    };
    return format.replace(/YYYY|MM|DD|HH|mm|ss/g, match => map[match]);
}

const timestamp = 1630454400000;
console.log(formatDate(timestamp)); // 输出: 2021-09-01 00:00:00
console.log(formatDate(timestamp, 'YYYY/MM/DD')); // 输出: 2021/09/01

方法 4:使用 Moment.js 库

// HTML: <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
const timestamp = 1630454400000;
const formatted = moment(timestamp).format('YYYY-MM-DD HH:mm:ss');
console.log(formatted); // 输出: 2021-09-01 00:00:00

// 本地化
moment.locale('zh-cn');
console.log(moment(timestamp).format('LLL')); // 输出: 2021年9月1日 08:00

方法 5:使用 date-fns 库

// NPM: npm install date-fns
import { format } from 'date-fns';

const timestamp = 1630454400000;
const formatted = format(new Date(timestamp), 'yyyy-MM-dd HH:mm:ss');
console.log(formatted); // 输出: 2021-09-01 00:00:00

方法 6:使用 jQuery(结合 DOM)

// HTML: <input type="text" id="timestamp" value="1630454400000"><button onclick="format()">转换</button>
$(document).ready(function() {
    window.format = function() {
        const timestamp = $('#timestamp').val();
        const date = new Date(Number(timestamp));
        const formatted = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
        console.log(formatted); // 输出: 2021-09-01
    };
});

说明:需引入 jQuery:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

3.综合示例

以下是一个完整示例,展示多种转换方法:

<!DOCTYPE html>
<html>
<head>
    <title>时间戳转换</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/date-fns@2.30.0/dist/date-fns.min.js"></script>
    <style>
        body { font-family: Arial; padding: 20px; }
        input, button { margin: 10px; padding: 8px; }
    </style>
</head>
<body>
    <input type="text" id="timestamp" value="1630454400000" placeholder="输入时间戳">
    <button onclick="convert()">转换</button>
    <div id="output"></div>

    <script>
        function formatDate(timestamp, format = 'YYYY-MM-DD HH:mm:ss') {
            const date = new Date(timestamp);
            const map = {
                'YYYY': date.getFullYear(),
                'MM': String(date.getMonth() + 1).padStart(2, '0'),
                'DD': String(date.getDate()).padStart(2, '0'),
                'HH': String(date.getHours()).padStart(2, '0'),
                'mm': String(date.getMinutes()).padStart(2, '0'),
                'ss': String(date.getSeconds()).padStart(2, '0')
            };
            return format.replace(/YYYY|MM|DD|HH|mm|ss/g, match => map[match]);
        }

        function convert() {
            const timestamp = Number(document.getElementById('timestamp').value);
            if (isNaN(timestamp)) {
                alert('请输入有效时间戳!');
                return;
            }

            const date = new Date(timestamp);
            const output = `
                <p>原生 Date: ${formatDate(timestamp)}</p>
                <p>toLocaleString: ${date.toLocaleString('zh-CN')}</p>
                <p>Moment.js: ${moment(timestamp).format('YYYY-MM-DD HH:mm:ss')}</p>
                <p>date-fns: ${format(new Date(timestamp), 'yyyy-MM-dd HH:mm:ss')}</p>
            `;
            document.getElementById('output').innerHTML = output;
        }
    </script>
</body>
</html>

4.方法对比

方法依赖优点缺点
原生 Date无依赖,简单实现需手动格式化,代码稍长
toLocaleString()本地化支持,灵活选项格式因浏览器/地区不同
自定义格式化完全控制格式,灵活需编写额外代码
Moment.jsMoment.js功能强大,易用,支持本地化体积大,维护模式
date-fnsdate-fns轻量,模块化,现代需额外引入库
jQueryjQuery适合 jQuery 项目,简洁 DOM 操作需引入 jQuery,增加依赖

5.注意事项

const seconds = 1630454400;
const date = new Date(seconds * 1000);
if (isNaN(timestamp) || timestamp < 0) {
    throw new Error('无效时间戳');
}

6.总结

如果需要特定格式的实现(如 YYYY年MM月DD日)、时区处理,或其他 JavaScript 相关问题,请提供更多细节,我可以进一步优化回答!

以上就是JavaScript将时间戳转换为日期格式的多种转换方法的详细内容,更多关于JavaScript时间戳转为日期格式的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文