V2EX 首页   注册   登入
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请 登入
Sponsored by
唐茶 字节社
中文世界最好的电子书城
V2EX  ›  PHP

PHP中,如何优雅的将mysql存储的int型“201112”输出成“2011-12”

By summic at 133 天前, 1149 次点击
34 回复  |  直到 2012-04-13 19:27:26 PM
    1
icyflash   133 天前
date_format(date_create_from_format('Ym', 201112), 'Y-m')
    2
summic   133 天前
我之前的实现实和两次 substr,感觉很ugly
    3
loning   133 天前
echo number_format(201112/100,2,'-','');
有点蛋疼,没C#舒服..
    4
icyflash   133 天前
@loning 如果是这样格式的就不行了吧 20111
    5
reus   133 天前
substr有什么ugly的呢,这种洁癖要不得啊要不得
    6
vibbow   133 天前
每一个优雅的接口后面都有一个龌龊的实现~
    7
webgeekman   133 天前
看看这个方法怎么样:echo date('Y-m',strtotime($yourDateFromDB.'01'));
    8
kojp   133 天前
    9
loning   132 天前
其实压根数据库就不该这样存...
    10
ywjno   132 天前
用正则试试?
    11
sarices   132 天前
...你直接纯time(),然后用d()转换就可以了,何必将日期去“-”再存?省事很多
    12
sarices   132 天前
打错了,一直自定义一个d()函数用作时间转换,应该是date()才对
    13
glume   132 天前
顶楼上。日期都存为UNIX时间。使用的时候可以用各种自定义的函数转嘛,还能搞成多少小时多少天之前这种。
    14
ywjno   132 天前
@glume @sarices 如果是客户的数据库的话,字段类型不是你想改就能改的
    15
summic   132 天前
@ywjno 不让随便改人家的数据库,为了解决一个小问题,改了字段类型,会引入更多bug
    16
avatasia   132 天前
dt / 100 + "-" + dt %100 最高
    17
Hyperion   132 天前
echo rtrim(chunk_split("201112", 4, "-"), "-");

-_-
    18
forerunner   76 天前
@avatasia 话说“20121”这个蛋疼的问题依旧蛋疼~
感觉还是substr +1一下
    19
avatasia   76 天前
@forerunner
if(@in < 100000)
@out = @in /10+ "-" + @in % 10
else
@out = @in / 100 + "-" + @in % 100
    20
xwsoul   73 天前
@sarices 也要看需求的, 不能一概时间戳:
1. 要做索引,索引肯定大
2. 在某些特定条件下, 如同一天生日的用户, 用时间戳就会很麻烦
    21
chairo   72 天前
@xwsoul时间戳可以取区间啊怎么会麻烦
    22
tuoxie007   72 天前
@reus 让你知道什么叫ugly
if (str == '201212')
return '2012-12'
    23
xwsoul   70 天前
@chairo 求时间戳换算生日方法...考虑效率
    24
chairo   70 天前
@xwsoul 用php把'xxx-xx-xx 00:00:00'和'xxx-xx-xx 23:59:59'转换成unix时间戳,然后sql中>=和<=不就可以了?这样效率还会差?在这列做索引都没问题
    25
benzhe   70 天前
正则是个好同志
preg_replace('/(\d{4})(\d+)/','$1-$2',201012);
    26
xwsoul   70 天前
@chairo 84年和85年同一天生日的话...时间戳是不一样的吧?
    27
guoquan   70 天前
我觉得……你应该优雅的别这么存……
    28
chairo   70 天前
@xwsoul 当然时间戳不一样啊,怎么可能一样...不过前边我有个错误应该是'xxxx-xx-xx 00:00:00'和'xxxx-xx-xx 23:59:59'格式转成时间戳,年那少了一位...
    29
chairo   70 天前
@xwsoul 我刚明白你想要的需求。。。确实如果查所有人同月同日但不同年的话时间戳有点麻烦,Sorry没注意看,本来我理解的同一天就是同年同月同日
    30
xwsoul   68 天前
@chairo 呃..也是我没表述清楚...
    31
cute   61 天前
echo wordwrap('201112', 4, '-', true);
    32
cute   61 天前
或者echo substr_replace('201112', '-', 4, 0);
    33
airylinus   41 天前
如果要谈论优雅,所有世界都存储为int
    34
Semon   41 天前
@vibbow +1
Linode
关于   |   FAQ   |   我们的愿景   |   广告投放   |   工作空间   |   Gadget Lab   |   博客   |   上网首页   |   285 人在线   最高记录 362
创意工作者们的社区
Lovingly made by OLIVIDA
VERSION: 3.0.0-dev
♥ Do have a faith in what you're doing.