Javascript将日期时间字符串转换为纪元
Posted
技术标签:
【中文标题】Javascript将日期时间字符串转换为纪元【英文标题】:Javascript Convert Date Time string to Epoch 【发布时间】:2012-11-22 08:10:06 【问题描述】:所以我放弃了……整天都在尝试这样做;
我有一个以dd/MM/yyyy hh:mm
(04/12/2012 07:00
) 格式提供日期和时间的字符串。
我需要把它变成一个纪元日期,这样我就可以对其进行一些计算。我无法修改发送给我的日期时间格式。
javascript 或 jQuery 都可以。
【问题讨论】:
new Date('04/12/2012 07:00')
?
谢谢 Rocket,但那会给我 4 月 12 日,我想要 12 月 4 日。
Converting UTC string to epoch time in javascript的可能重复
uhhhh.... @cbm64 你的意思是 new Date('12/04/2012 07:00')
。 ...?
@cbm64 嗨,我面临同样的问题。但就我而言,我只有日期而不是时间。 mm/dd/yyyy 的新日期正在工作,但我想使用 dd/mm/yyyy 。如果是 new Date(dd/mm/yyyy),则给出无效日期。你能告诉我你是怎么解决的吗?
【参考方案1】:
JavaScript dates 在内部存储为自纪元以来的毫秒数。您只需要将其转换为数字,例如使用一元 +
运算符来获取它们。或者您可以使用.getTime
method。
解析日期字符串会更难。您可能会使用正则表达式从字符串中提取值并将它们传递给Date.UTC
:
var parts = datestring.match(/(\d2)\/(\d2)\/(\d4) (\d2):(\d2)/);
return Date.UTC(+parts[3], parts[2]-1, +parts[1], +parts[4], +parts[5]);
这将为您的示例日期生成1354604400000 ms
。
【讨论】:
他从月份字段中减去 1 的原因是月份基于 0 索引。这意味着一月是“0”。不是 1。十二月是 11。不是 12。奇怪但真实。 这太复杂了。Math.floor(new Date('12/04/2012 07:00') / 1000)
工作得很好。您可能需要做一些字符串操作来翻转月份和日期的值,但这不是问题,它仍然比您在这里得到的更简单。
@John 不,它不能完全正常工作,有许多浏览器不同意如何解释该格式,以及它是否代表 UTC 中的 07:00
或本地时区中的 07:00
。
@Bergi 我从没想过如此基本的东西在网络上会不一致。那么这是否意味着需要收集用户区域设置以确定日期时间是否为 UTC?或者,是否只能使用服务器设置时间戳并让浏览器根据用户区域设置来解释其本地时间?我想只要你所有的时间戳都基于相同的服务器时间,用户设置他们的语言环境就是真正需要发生的一切。这种方法还有什么我会遗漏的吗?
@John 是的,UTC 时间戳(整数)是在服务器和客户端之间传输日期的首选格式。或者使用带有时区指示符的 ISO 8601 字符串,自从我写了这个答案后,不支持这些的浏览器就消失了。【参考方案2】:
var someDate = new Date(dateString);
someDate = someDate.getTime();
【讨论】:
不错的尝试,但按照上面的格式,这会将 12 月 4 日变成 4 月 12 日(2012 年 4 月 12 日星期四 07:00:00 UTC+0100)。 嗯好吧...所以你为什么不能修改发送给你的格式?如果你不能修改发给你的原始值,我可以理解,但你不能在得到它后重新格式化它吗?如果是这样,您可以在空间.split
然后 /
和 :
并获取零件并将它们重新排序为 new Date()
识别的格式
我无法修改字符串输入,因为它是以该格式从数据库发送的。我使用了 Bergi 的解决方案,但感谢您的回复!
原则上很好,他完全按照我所说的做了...获取字符串并将各部分重新排序为 js 函数可识别的格式。很高兴听到您的回答!【参考方案3】:
您可以使用 momentjs 库来轻松完成此操作。
var epoch = moment(str).unix();
http://momentjs.com/
【讨论】:
【参考方案4】:我使用此代码将我的字符串日期时间转换为纪元
new Date(<datetime string>').getTime()
例如:
let epoch = new Date('2016-10-11').getTime()
【讨论】:
似乎缺少依赖定义 -Fatal error: Date(...).getTime is not a function
谢谢!很有用【参考方案5】:
var time = new Date().getTime() / 1000 + 900 + 330*60;
console.log("time = "+time);
getTime() 将返回当前时间,最后 3 位以毫秒为单位,因此请先将其除以 1000。现在我添加了 900 表示我需要从当前时间开始的 15 分钟(如果您不需要进一步的延迟时间,您可以删除),需要 330*60(5 小时 30)将 GMT 时间转换为我当前区域的 IST时间。
使用以下网站测试您的时间:-
https://www.epochconverter.com/
希望对你有帮助:)
【讨论】:
【参考方案6】:我的答案是使用 JavaScript 将当前时间转换为纪元时间
const currentDate = Math.floor(new Date() / 1000);
console.log(currentDate); //无论打印什么值,您都可以到本网站https://www.epochconverter.com/查看相同的值来确认。
【讨论】:
【参考方案7】:最简单的方法是 -
const moment = require('moment')
function getUnixTime () return this.getTime() / 1000 | 0
let epochDateTime = getUnixTime(new Date(moment().add(365, 'days').format('YYYY-
MM-DD hh:mm:ss')))
【讨论】:
【参考方案8】:您可以使用Date.parse(date)
。
function epoch (date)
return Date.parse(date)
const dateToday = new Date() // Mon Jun 08 2020 16:47:55 GMT+0800 (China Standard Time)
const timestamp = epoch(dateToday)
console.log(timestamp) // => 1591606075000
【讨论】:
我不知道为什么没有人投票,但它就像一个魅力...... 这应该是有效的答案。【参考方案9】:由于您的日期格式为 dd/MM/yyyy hh:mm,因此您需要更改日期格式(第 1 步)。否则,您可以转到(第 2 步)。
步骤 1. 将日期格式更改为 MM/dd/yyyy hh:mm
var currentTime = "21/02/2021 12:00"
var monthPosition = currentTime.split('/', 2).join('/').length
var day = currentTime.substring(0, currentTime.indexOf('/'))
var month = currentTime.substring(currentTime.indexOf('/') + 1, monthPosition);
var time = month + "/" + day + currentTime.substring(month.length + day.length + 1); //"02/21/2021 12:00"
第 2 步:将日期更改为纪元时间
var epochTime = Date.parse(time);
//or get current time of epoch time
var currentEpoch = Date.parse(new Date());
注意:如果您尝试使用 new Date() 执行 Date.parse(),并且解析日期字符串时出错,请添加 toString()
var currentEpoch = Date.parse(new Date().toString());
【讨论】:
【参考方案10】:Number(new Date('04/12/2012 07:00'))
【讨论】:
以上是关于Javascript将日期时间字符串转换为纪元的主要内容,如果未能解决你的问题,请参考以下文章
是否有 perl 5.005 核心模块可以将纪元秒数转换为日期时间字符串?
使用 sql 将字符串纪元代码从 unix 时间戳转换为日期