0

0

js 怎么获取当前时间戳

煙雲

煙雲

发布时间:2025-08-14 18:30:02

|

549人浏览过

|

来源于php中文网

原创

获取javascript当前时间戳最推荐的方式是使用 date.now(),它返回自1970年1月1日00:00:00 utc以来的毫秒数,且不创建实例,性能更优;2. new date().gettime() 和 new date().valueof() 也可获取毫秒级时间戳,结果与 date.now() 一致,但 date.now() 更简洁高效;3. 若需秒级时间戳,应使用 math.floor(date.now() / 1000) 将毫秒转换为秒;4. javascript时间戳单位为毫秒,而unix时间戳单位为秒,两者需注意单位转换,避免因未乘除1000导致时间错误;5. 常见误区包括:混淆毫秒与秒单位、忽略时区影响(时间戳为utc,显示时会本地化)、依赖不可靠的客户端时间、错误解析字符串时间戳(应先转为数字)、手动处理复杂日期计算易出错;6. 对于格式化和高级操作,建议使用 date-fns 或 dayjs 等专业库,以实现灵活的日期格式化、时区处理和安全的日期加减运算,提升开发效率与代码可靠性。

js 怎么获取当前时间戳

JavaScript获取当前时间戳,最直接且推荐的方式是使用

Date.now()
方法。它返回的是自1970年1月1日00:00:00 UTC(协调世界时)以来经过的毫秒数。

解决方案

在JavaScript里,想拿到当前的时间戳,其实有好几种途径,但最常用也最推荐的,无非是那几个:

首先,是

Date.now()
。这是ES5之后引入的一个静态方法,非常简洁高效。你直接调用
Date.now()
就能得到一个数字,这个数字就是当前时间距离Unix纪元(1970年1月1日00:00:00 UTC)的毫秒数。我个人在项目中,只要是需要毫秒级时间戳,几乎都首选它,因为它不创建
Date
对象实例,性能上会略胜一筹。

const timestampMs = Date.now();
console.log(timestampMs); // 例如:1678886400000

其次,如果你更习惯或者代码里已经有了

Date
对象实例,那么
new Date().getTime()
也是一个非常常见且有效的方法。它和
Date.now()
的结果是一样的,都是毫秒数。

const dateObj = new Date();
const timestampMsFromGetTime = dateObj.getTime();
console.log(timestampMsFromGetTime); // 和上面结果类似

还有一个是

new Date().valueOf()
,这个方法其实和
getTime()
几乎等价,也是返回毫秒数。在实际开发中,用
getTime()
的频率可能更高一些,但知道
valueOf()
的存在也无妨。

const timestampMsFromValueOf = new Date().valueOf();
console.log(timestampMsFromValueOf); // 同样是毫秒数

如果你需要的是秒级时间戳,那也很简单,把毫秒数除以1000,再向下取整就行了:

const timestampSec = Math.floor(Date.now() / 1000);
console.log(timestampSec); // 例如:1678886400

通常情况下,我建议优先使用

Date.now()
,因为它最直接、性能也最好。

JavaScript时间戳的单位是什么?它和Unix时间戳有什么区别

这个问题其实挺关键的,很多初学者会在这里犯迷糊。简单来说,JavaScript内置获取的时间戳,比如

Date.now()
或者
new Date().getTime()
,它们的单位都是毫秒(milliseconds)。这意味着你得到的是一个很大的整数,代表自1970年1月1日00:00:00 UTC以来经过的毫秒总数。

而我们常说的“Unix时间戳”或者“POSIX时间戳”,它的标准单位是秒(seconds)。也就是说,Unix时间戳是自1970年1月1日00:00:00 UTC以来经过的秒数。

所以,它们之间的核心区别就在于单位:

  • JavaScript时间戳(Date.now()等):毫秒
  • Unix时间戳:秒

这就意味着,如果你从后端API拿到的时间戳是秒级的Unix时间戳,而你前端JS需要用

Date
对象处理(
new Date()
构造函数默认接受毫秒数),你就需要把它乘以1000。反之,如果你用JS获取了毫秒级时间戳,想传给后端或者其他系统期望秒级时间戳的地方,那就得除以1000并取整。

我遇到过不少次,因为没有注意这个单位差异,导致日期显示错误或者数据处理出问题的情况。比如,一个秒级时间戳

1678886400
(代表2023年3月15日),如果你直接
new Date(1678886400)
,JS会把它当成1970年1月1日后1678886400毫秒,那结果就完全不对了,可能显示成1970年的某个时间。正确的做法是
new Date(1678886400 * 1000)
。所以,在处理时间戳时,确认其单位是第一步。

BGremover
BGremover

VanceAI推出的图片背景移除工具

下载

在前端开发中,处理时间戳时有哪些常见的“坑”或误区?

处理时间戳和日期在前端开发中真是个老大难的问题,我踩过的坑可不少。除了上面提到的毫秒和秒的单位混淆,还有几个点是大家经常会忽略的:

  1. 时区问题: 时间戳本身是UTC时间(协调世界时),它不包含任何时区信息。但当你把时间戳转换成

    Date
    对象,并用
    toLocaleString()
    或直接在浏览器控制台打印时,它会根据你当前系统的时区进行本地化显示。这对于需要展示特定时区时间(比如后端存储的是北京时间,但用户在纽约)的场景来说,就很容易出问题。我通常会建议,如果涉及到跨时区展示,要么后端直接返回格式化好的字符串,要么前端使用专门的日期库(如
    date-fns-tz
    dayjs
    的时区插件)来精确控制时区转换。

  2. 客户端时间不可靠: 用户的本地设备时间是不受控的,他们可以随意更改。这意味着,如果你完全依赖

    Date.now()
    来生成操作时间戳(比如记录用户操作时间),一旦用户修改了系统时间,你的数据就可能不准确,甚至出现“未来时间”或者“过去时间”。对于需要严格时间记录的场景,我通常会要求后端提供一个服务器时间戳,前端在发起请求时带上这个时间戳,或者至少在关键操作时依赖服务器时间。

  3. 字符串时间戳的解析: 有时候后端返回的时间戳是字符串形式,比如

    '1678886400000'
    。虽然JavaScript的
    Date
    构造函数能够解析一些日期字符串(如ISO 8601格式),但对于纯数字字符串,直接
    new Date('1678886400000')
    可能会有问题,或者在不同浏览器上表现不一致。最稳妥的做法是先用
    parseInt()
    Number()
    将其转换为数字,再进行处理:
    new Date(parseInt('1678886400000'))

  4. 日期计算的复杂性: 比如计算两个日期之间相差多少天,或者在某个日期上增加一个月。这些操作看似简单,但涉及到月份天数不一、闰年等复杂情况时,手动计算很容易出错。这就是为什么我会强烈推荐使用成熟的日期处理库,它们已经处理了这些复杂的边缘情况。

这些“坑”往往不是代码语法错误,而是逻辑上的偏差,一旦上线就可能带来难以追踪的问题。

除了简单的获取,如何在JavaScript中对时间戳进行格式化和更灵活的日期操作?

仅仅获取时间戳显然不够,在前端界面上,我们通常需要将这些枯燥的数字转换成用户能看懂的、友好的日期时间格式,比如“2023年3月15日 下午3:00”。同时,我们可能还需要进行各种日期操作,比如计算几天后、几小时前。

最基础的,你可以把时间戳转换成

Date
对象,然后利用
Date
对象自带的一些方法:

const timestampMs = Date.now();
const date = new Date(timestampMs);

// 基本的本地化字符串
console.log(date.toLocaleString());      // 比如 "2023/3/15 下午3:00:00" (格式取决于浏览器和地区)
console.log(date.toLocaleDateString());  // 比如 "2023/3/15"
console.log(date.toLocaleTimeString());  // 比如 "下午3:00:00"

// 获取特定部分
console.log(date.getFullYear()); // 年
console.log(date.getMonth() + 1); // 月 (注意:0-11,所以要加1)
console.log(date.getDate()); // 日
console.log(date.getHours()); // 小时
console.log(date.getMinutes()); // 分钟
console.log(date.getSeconds()); // 秒

虽然

Date
对象提供了这些基础方法,但它的格式化能力有限,而且链式调用不方便,更别提复杂的日期加减和时区处理了。在我看来,一旦项目对日期时间操作有稍微复杂一点的需求,引入一个专业的日期处理库几乎是必然的选择。

目前前端比较流行的日期库有:

  • date-fns
    这是一个非常轻量且模块化的库,它提供了大量纯函数,你可以按需引入。它的API设计非常现代化,我很喜欢它“函数式”的风格,比如
    format(date, 'yyyy-MM-dd HH:mm:ss')
    这种方式,非常直观。
  • dayjs
    另一个轻量级替代品,API设计上高度兼容
    Moment.js
    ,如果你之前用过
    Moment.js
    ,迁移成本很低。它也支持插件系统来扩展功能,比如时区支持。
  • Moment.js
    虽然官方已经宣布进入维护模式,不再推荐新项目使用,但它在很多老项目中依然广泛存在。它的链式调用和强大的格式化能力确实很方便。如果你的项目已经在使用它,也没必要为了这个而大动干戈去替换。

date-fns
为例,格式化和日期加减会变得非常优雅:

// 假设你已经安装了 date-fns
// import { format, addDays, subHours } from 'date-fns';

// 格式化
// console.log(format(new Date(), 'yyyy年MM月dd日 HH:mm:ss')); // 2023年03月15日 15:00:00

// 日期加减
// const tomorrow = addDays(new Date(), 1); // 明天
// const twoHoursAgo = subHours(new Date(), 2); // 两小时前
// console.log(format(tomorrow, 'yyyy-MM-dd'));
// console.log(format(twoHoursAgo, 'HH:mm'));

选择一个合适的日期库,能够大大提升开发效率,减少因日期处理逻辑复杂而引入的bug。我个人倾向于

date-fns
dayjs
,它们更符合现代前端的轻量化趋势。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

804

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

435

2024.06.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1502

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

625

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

654

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

610

2024.04.29

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

14

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
如何进行WebSocket调试
如何进行WebSocket调试

共1课时 | 0.1万人学习

TypeScript全面解读课程
TypeScript全面解读课程

共26课时 | 5.1万人学习

前端工程化(ES6模块化和webpack打包)
前端工程化(ES6模块化和webpack打包)

共24课时 | 5.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号