相当于php的strtotime()的Javascript?


Answers:


50

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

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

这样行吗?


看来我不工作,日期以dmY格式格式化。
Valentin Despa

30
-1。这仅涵盖RFC 822或ISO 8601格式的日期,但strtotime()支持许多其他格式。
杰克

1
可能会满足OP的用例,但这在技术上是不正确的,无效的问题答案。查看(并请投票)Westy92的答案。
Nate Abele

66

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

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

唯一的区别是此函数返回毫秒而不是秒,因此您需要将结果除以1000。

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


29
不; 这项工作与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");
Ivan Castellanos 2014年

1
谢谢@Arnaldo。这对我有用。您的回答比“ Djechelon的”更容易接受
Adi

这应该可以,但是不可靠。Date.parse('2020-06-06')应该返回与Date.parse('2020年6月6日')相同的时间戳,但不是。(1591401600000和1591423200000)
文森特

35

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

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

更新:1.0.2版中的此功能无法处理这种情况:('2007:07:20 20:52:45' 请注意:年份和月份的分隔符)

更新2018:

现在可以作为npm模块使用!简单npm install locutus然后在您的来源中:

var strtotime = require('locutus/php/datetime/strtotime');

3
我通常不喜欢只是链接到库的答案,但是在这种情况下,因为JavaScript不能像strtotime那样处理几乎疯狂的情况,所以这是一个很棒的答案。谢谢!
Fusty

Locutus的最新版本(此时为2018年9月7日)不能处理类似``昨天19:00''的字符串。
nicolas

4

我嫉妒php中的strtotime(),但我确实在使用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();

0

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

试试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

这不能完全回答问题(得分为负)。有没有办法撤销赏金?
Westy92 '17

0

很少有模块提供类似的行为,但并不完全类似于PHP的strtotime。在一些替代方案中,我发现date-util 的效果最佳。


0

var strdate = new Date('Tue Feb 07 2017 12:51:48 GMT+0200 (Türkiye Standart Saati)');
var date = moment(strdate).format('DD.MM.YYYY');
$("#result").text(date); //07.02.2017
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>

<div id="result"></div>


弃用警告:提供的值不是公认的ISO格式。瞬间的建设又回到了jsDate() –如此……与new Date(strdate)真正的一样…
deceze

0

也许您可以利用以下示例函数:

function strtotime(date, addTime){
  let generatedTime=date.getTime();
  if(addTime.seconds) generatedTime+=1000*addTime.seconds; //check for additional seconds 
  if(addTime.minutes) generatedTime+=1000*60*addTime.minutes;//check for additional minutes 
  if(addTime.hours) generatedTime+=1000*60*60*addTime.hours;//check for additional hours 
  return new Date(generatedTime);
}

let futureDate = strtotime(new Date(), {
    hours: 1, //Adding one hour
    minutes: 45 //Adding fourty five minutes
  });
document.body.innerHTML = futureDate;

`

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.