Javascript 相当于 php 的 strtotime()?

IT技术 javascript date
2021-02-26 19:20:52

在 PHP 中,您可以轻松地将英文文本日期时间描述转换为正确的日期strtotime()

Javascript中有没有类似的东西?

6个回答

是的。并且所有主流浏览器都支持它:

var ts = Date.parse("date string");

唯一的区别是这个函数返回的是毫秒而不是秒,所以你需要将结果除以 1000。

检查 JavaScript 可以解析哪些有效格式。

php 的 strtotime 和 javascripts Date.parse 只是在基本层面上相似。正如 Ivan 在上面评论的那样,strtotime 能够通过猜测格式和获取诸如“明天”之类的相对日期来做更多的事情。
2021-04-19 19:20:52
不; 这与 php strtotime 非常不同,php 文档的所有示例都不起作用,一个都没有strtotime("now"); strtotime("10 September 2000"); strtotime("+1 day"); strtotime("+1 week"); strtotime("+1 week 2 days 4 hours 2 seconds"); strtotime("next Thursday"); strtotime("last Monday");
2021-04-29 19:20:52
这应该有效,但它不可靠。Date.parse('2020-06-06') 应该返回与 Date.parse('June 6, 2020') 相同的时间戳,但事实并非如此。(1591401600000 对比 1591423200000)
2021-05-01 19:20:52
谢谢@Arnaldo。这对我有用。你的回答比“Djechelon的”更容易接受
2021-05-06 19:20:52

我找到了这篇文章并尝试了教程。基本上,您可以使用日期构造函数来解析日期,然后从getTime()方法中写入获取秒数

var d=new Date("October 13, 1975 11:13:00");
document.write(d.getTime() + " milliseconds since 1970/01/01");

这行得通吗?

似乎我不工作它的日期格式为 dmY 格式。
2021-04-24 19:20:52
-1. 这仅涵盖 RFC 822 或 ISO 8601 格式的日期,但strtotime()支持许多其他格式。
2021-05-01 19:20:52
这可能恰好满足 OP 的用例,但它在技术上是不正确的、对问题的无效答案。请参阅(并请投票)Westy92 的回答。
2021-05-10 19:20:52
使用此内置字符串解析时要小心。Javascript 将针对部分 ISO 日期字符串以不同方式处理时区。代码new Date('2021-04-01')将有一个 UTC 时区的午夜时间,而日期new Date('04/01/2021')将使用本地时区的午夜时间创建。如果您使用两种字符串格式解析日期,则这种差异可能会在程序中产生细微的错误。
2021-05-12 19:20:52

看看这个PHP 的 strtotime() 在 JavaScript 中的实现!

我发现它对我投入的所有东西都与 PHP 相同。

更新:1.0.2 版本的这个函数无法处理这种情况:('2007:07:20 20:52:45' 注意:年和月分隔符)

2018 年更新:

这现在可以作为一个npmmodule使用简单地npm install locutus然后在您的来源中:

var strtotime = require('locutus/php/datetime/strtotime');
我通常不喜欢只是链接到库的答案,但在这种情况下,因为 JavaScript 几乎不能像 strtotime 那样处理疯狂的情况,所以这是一个很棒的答案。谢谢!
2021-05-06 19:20:52
最新版本的 Locutus(此时为 2018 年 9 月 7 日)不处理像“昨天 19:00”这样的字符串。
2021-05-10 19:20:52

我嫉妒 php 中的 strtotime(),但我使用 moment 在 javascript 中做我的。不像 php 那样甜蜜,但也巧妙地完成了这个技巧。

// first day of the month
var firstDayThisMonth = moment(firstDayThisMonth).startOf('month').toDate();

来回使用subtract(),并add()endOf()startOf()

// last day of previous month
var yesterMonthLastDay = moment(yesterMonthLastDay).subtract(1,'months').endOf('month').toDate();

浏览器对解析字符串的支持不一致因为没有关于应该支持哪些格式的规范,所以在某些浏览器中有效的方法在其他浏览器中无效。

试试Moment.js - 它提供了用于解析日期的跨浏览器功能

var timestamp = moment("2013-02-08 09:30:26.123");
console.log(timestamp.milliseconds()); // return timestamp in milliseconds
console.log(timestamp.second()); // return timestamp in seconds
这并没有完全回答这个问题(并且有一个负分)。有没有办法取消赏金?
2021-04-29 19:20:52