大家是怎么看待 echo date('Ym', strtotime('next month', strtotime('20150130')) ); 这个问题的,算 bug 还是 unix 遗留下来的'习惯'?

V2EX = way to explore V2EX 是一个关于分享和探索的地方

这是一个创建于 3435 天前的主题,其中的信息可能已经有所发展或是发生改变。

我更倾向于201502 而不是201503. 最起码应该报个错什么的。

13 条回复    2015-02-03 23:45:03 +08:00

TimeLe

    1

TimeLe      2015-02-03 16:21:33 +08:00

2月没有30号,所以自动计算到下一月了~

lightening

    2

lightening      2015-02-03 16:23:33 +08:00
我觉得这是 bug。同是 UNIX 环境,Ruby 里:Date.new(2015,1,30) + 1.month

=> Sat, 28 Feb 2015

nilennoct

    3

nilennoct      2015-02-03 16:29:08 +08:00 via iPad

都说了‘next month’还3月这不是bug是什么?

Sunyanzi

    4

Sunyanzi      2015-02-03 16:29:45 +08:00
我不觉得这是个 bug ... php 设计如此 ...

如果你需要跳二月的话可以用 MySQL 来完成 DATE_ADD( '2015-01-30', INTERVAL 1 MONTH ) ...

Sunyanzi

    7

Sunyanzi      2015-02-03 16:42:39 +08:00

如果你给出的不是一个月末的日期而是永远使用每月第一天的话 +1 month 就永远不会有问题 ...

invite

    9

invite      2015-02-03 19:24:30 +08:00

那如果 3月31日 来实验,应该是几月了?

lincanbin

    10

lincanbin      2015-02-03 20:09:11 +08:00
<?php$d = new DateTime( '2015-01-30' );$d->modify( 'first day of next month' );echo $d->format( 'F' ), "\n";

?>

zyc841584303

    11

zyc841584303      2015-02-03 20:53:13 +08:00
@Sunyanzi 每天都会运行的一个脚本,数据库分表来, xxxx_201501_201502 然后前几天出现问题的变成了xxxx_201501_201503。官网上面很早就有这个问题了,一直没管。
严谨点,推荐10楼的做法echo date('Ym', strtotime('first day of next month', strtotime('20150130')) );
msg7086

    12

msg7086      2015-02-03 23:40:05 +08:00

一年的第2个月开始数起的第30天。
算月份还是用第一天来算吧,用第30天来算,有二义性。

Delbert

    13

Delbert      2015-02-03 23:45:03 +08:00
@msg7086 楼主的意思是每天都会进行分表,自然要获取当前时间了。见11楼,所以10楼正解。

首页 - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-04-30 21:48
浙ICP备14020137号-1 $访客地图$