当前位置: 首页 > 面试题库 >

PHP strtotime +1个月的行为

龚鸿羽
2023-03-14
问题内容

我知道PHP函数的有害行为

时间

例如,向以下日期添加一个月(+1个月):31.01.2011-> 03.03.2011

知道这不是正式的
PHP错误
,并且该解决方案背后有一些争论,但至少对我而言,这种行为造成了很多时间的浪费(过去和现在),我个人讨厌它。

我发现甚至更陌生的是,例如:

MySQL: DATE_ADD(‘2011-01-31’,INTERVAL 1 MONTH)返回2011-02-28或

C# 其中新的DateTime(2011,01,31).AddMonths(1); 将返回28.02.2011

wolframalpha.com给出31.01.2013 + 1 month输入;将于2013年2月28日星期四返回

在我看来,对于 这个我在PHP错误报告中看到 的愚蠢问题,其他人找到了一个更体面的解决方案:
“如果我说我们从现在开始一个月后会见,那将是星期几”或类似的东西。答案是:如果下个月不存在31,请告诉我该月的最后一天,但 请坚持下个月。

所以我的问题是: 是否有一个PHP函数(由某人编写)可以解决这个未被官方认可的bug?因为我不认为我是唯一一个在添加/减去月份时想要其他行为的人。

我对解决方案特别感兴趣,该解决方案不仅可以在本月底使用,而且可以完全替代strtotime。案件strotime +n months也应处理。

编码愉快!


问题答案:

这是您可以使用的算法。实现自己应该足够简单。

  • 在变量中有原始日期和+1个月日期
  • 提取两个变量的月份部分
  • 如果差异大于1个月(或者原始日期是12月,另一个不是1月),则将后一个变量更改为下个月的最后一天。您可以使用例如tdate()得到最后一天:date( 't.m.Y' )


 类似资料:
  • 问题内容: 我需要一些帮助来编写MySQL查询,以显示上个月的行,但不显示整个月的行,仅显示直到现在的同一天,一小时和一分钟,直到now()为止,而仅显示一个月前。 因此,例如,如果今天是下午5:25的5/19,我需要选择4/19午夜12:00 am 4/1到5:25 pm的行(当然也要从同一年开始)。 谢谢! 问题答案: 您可以通过计算前一个月的last_day并添加一天来获得该月的第一天。这很

  • 问题内容: 我有一个简单的变量,今天增加了一个月: 今天是2013年1月,所以我希望能回到2013-02,但我却能获得2013-03。我不知道为什么要跳到三月。 问题答案: 跳到3月是因为今天是1月29日,加上一个月就表示2月29日(该日期不存在),因此它将移至下一个有效日期。 这也将在很多个月的31日发生,但在1月到2月的情况下显然更明显,因为2月较短。 如果您对月份中的某天不感兴趣,而只希望它

  • 问题内容: 我在sql server中有一个datetime列及其可选字段,如果用户决定不输入,那么我想在表中插入NULL值,并定义如下内容: 当我插入sql server时,我在asp.net中有此代码 但问题是:其插入 在SQL表而不是 我在这里做错了什么? 更新: 问题答案: 假设您有: 如果您想插入SQL NULL,那么您应该下一步: 意思是: 如果要在函数中注意可空的datetime,则

  • 我发现一个奇怪的结果,当我使用扩散数月的拉维碳。谁能为我解释一下为什么它是这样工作的。是虫子吗?以及如何使其正确。 产量为: 0(预期: 1) 但是 产出为:1 这个奇怪的结果只发生在2月1日到3月1日之间,其他月份的结果也是意料之中的。 我也尝试而不是 它返回月份:0,天数:28(不是预期的月份:1,天数:0) 所以问题可能来自PHP,而不是Carbon。

  • 我想在excel-vba中编写一个代码,在工作表的一列中填充特定年份的日期。< br >该准则还应考虑闰年。比方说,我已经在单元格B1中输入了年份(如2020年),因此列A应该填充366个日期条目(考虑到闰年)。

  • 问题内容: 该的getTime()获取以毫秒为某一特定日期时间。能否可靠地用于18世纪的约会。我们使用Millis并将其存储在字符串变量中以备将来比较。过去可以使用多长时间有限制? 问题答案: 如果您要比较遥远的过去的日期/时间,我强烈建议您看一下JodaTime。或者实际上是任何类型的日期/时间比较和计算。这是一个很棒的图书馆! 不要依靠getTime()做你想做的事情。至少考虑使用Java的C