尝试获得上个月的最后一天时,PHP日期行为很奇怪 [英] Weird PHP date behavior when trying to get last day of last month

查看:112
本文介绍了尝试获得上个月的最后一天时,PHP日期行为很奇怪的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚注意到PHP日期功能很奇怪,有人可以解释一下我在做什么错吗?



以下代码显示相同的结果

 <?php 
echo date('Ym-t');
//本月最后一天输出:2016-03-31
echo date('Y-m-t',strtotime( - 1个月));
//由于某些原因,输出相同:2016-03-31
echo date('Y-m-t',strtotime(+ 1 month));
//输出-31-31

可能只是我是愚蠢的,但是有人可以解释我为什么会这样吗?

解决方案

使用 t 你的日期('Ym-t')打电话给你:


t - 给定月份的天数


如果您尝试 Ymd 你会发现这是两个不同的日期:

  ?php 

var_dump(date('Ym-d'));
var_dump(date('Y-m-d',strtotime(' - 1 month')));




string(10) -31

string(10) 2016-03-02


要解决此问题,您可以使用上个月的最后一天的 strtotime 格式 code>

 <?php 

var_dump(date('Ym-d '));
var_dump(date('Y-m-d',strtotime('last last of last month')));

导致:


string(10) 2016-03-31

string(10) -29



I've just noticed that PHP date function acts weird, can someone explain me what i'm doing wrong?

Following code displays same results

<?php
echo date('Y-m-t');
// Outputs last day of this month: 2016-03-31
echo date('Y-m-t', strtotime("-1 month"));
// For some reason outputs the same: 2016-03-31
echo date('Y-m-t', strtotime("+1 month"));
// Outputs 2016-05-31

It might be just me being stupid, but could someone explain me why this happens?

解决方案

When using t in your date('Y-m-t') call you're referring to:

t - Number of days in the given month

If you tried Y-m-d you'd figure out that it's 2 different dates:

<?php

var_dump( date('Y-m-d') );
var_dump( date('Y-m-d', strtotime('-1 month') ) );

string(10) "2016-03-31"
string(10) "2016-03-02"

To fix this issue you can use the strtotime format last day of last month:

<?php

var_dump( date('Y-m-d') );
var_dump( date('Y-m-d', strtotime('last day of last month') ) );

which results in:

string(10) "2016-03-31"
string(10) "2016-02-29"

这篇关于尝试获得上个月的最后一天时,PHP日期行为很奇怪的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆