PHP中,如何优雅的将mysql存储的int型“201112”输出成“2011-12” - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
summic
V2EX    PHP

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

  •  
  •   summic 2012-01-12 00:17:37 +08:00 6361 次点击
    这是一个创建于 5022 天前的主题,其中的信息可能已经有所发展或是发生改变。
    34 条回复    1970-01-01 08:00:00 +08:00
    icyflash
        1
    icyflash  
       2012-01-12 01:04:03 +08:00
    date_format(date_create_from_format('Ym', 201112), 'Y-m')
    summic
        2
    summic  
    OP
       2012-01-12 01:12:33 +08:00
    我之前的实现实和两次 substr,感觉很ugly
    loning
        3
    loning  
       2012-01-12 02:32:09 +08:00
    echo number_format(201112/100,2,'-','');
    有点蛋疼,没C#舒服..
    icyflash
        4
    icyflash  
       2012-01-12 02:56:00 +08:00
    @loning 如果是这样格式的就不行了吧 20111
    reus
        5
    reus  
       2012-01-12 03:30:43 +08:00 via Android
    substr有什么ugly的呢,这种洁癖要不得啊要不得
    vibbow
        6
    vibbow  
       2012-01-12 03:54:09 +08:00
    每一个优雅的接口后面都有一个龌龊的实现~
    webgeekman
        7
    webgeekman  
       2012-01-12 08:38:37 +08:00
    看看这个方法怎么样:echo date('Y-m',strtotime($yourDateFromDB.'01'));
    kojp
        8
    kojp  
       2012-01-12 09:09:24 +08:00
    loning
        9
    loning  
       2012-01-13 06:57:03 +08:00
    其实压根数据库就不该这样存...
    ywjno
        10
    ywjno  
       2012-01-13 09:07:28 +08:00
    用正则试试?
    sarices
        11
    sarices  
       2012-01-13 09:10:36 +08:00
    ...你直接纯time(),然后用d()转换就可以了,何必将日期去“-”再存?省事很多
    sarices
        12
    sarices  
       2012-01-13 09:11:29 +08:00
    打错了,一直自定义一个d()函数用作时间转换,应该是date()才对
    glume
        13
    glume  
       2012-01-13 09:38:22 +08:00
    顶楼上。日期都存为UNIX时间。使用的时候可以用各种自定义的函数转嘛,还能搞成多少小时多少天之前这种。
    ywjno
        14
    ywjno  
       2012-01-13 09:54:09 +08:00
    @glume @sarices 如果是客户的数据库的话,字段类型不是你想改就能改的
    summic
        15
    summic  
    OP
       2012-01-13 10:03:35 +08:00
    @ywjno 不让随便改人家的数据库,为了解决一个小问题,改了字段类型,会引入更多bug
    avatasia
        16
    avatasia  
       2012-01-13 11:27:35 +08:00
    dt / 100 + "-" + dt %100 最高
    Hyperion
        17
    Hyperion  
       2012-01-13 11:37:27 +08:00
    echo rtrim(chunk_split("201112", 4, "-"), "-");

    -_-
    forerunner
        18
    forerunner  
       2012-03-09 11:57:02 +08:00
    @avatasia 话说“20121”这个蛋疼的问题依旧蛋疼~
    感觉还是substr +1一下
    avatasia
        19
    avatasia  
       2012-03-09 12:55:12 +08:00
    @forerunner
    if(@in < 100000)
    @out = @in /10+ "-" + @in % 10
    else
    @out = @in / 100 + "-" + @in % 100
    xwsoul
        20
    xwsoul  
       2012-03-12 11:47:37 +08:00
    @sarices 也要看需求的, 不能一概时间戳:
    1. 要做索引,索引肯定大
    2. 在某些特定条件下, 如同一天生日的用户, 用时间戳就会很麻烦
    chairo
        21
    chairo  
       2012-03-12 14:34:35 +08:00 via Android
    @xwsoul时间戳可以取区间啊怎么会麻烦
    tuoxie007
        22
    tuoxie007  
       2012-03-12 14:46:24 +08:00
    @reus 让你知道什么叫ugly
    if (str == '201212')
    return '2012-12'
    xwsoul
        23
    xwsoul  
       2012-03-14 19:41:42 +08:00
    @chairo 求时间戳换算生日方法...考虑效率
    chairo
        24
    chairo  
       2012-03-14 20:00:32 +08:00
    @xwsoul 用php把'xxx-xx-xx 00:00:00'和'xxx-xx-xx 23:59:59'转换成unix时间戳,然后sql中>=和<=不就可以了?这样效率还会差?在这列做索引都没问题
    benzhe
        25
    benzhe  
       2012-03-14 20:36:03 +08:00
    正则是个好同志
    preg_replace('/(\d{4})(\d+)/','$1-$2',201012);
    xwsoul
        26
    xwsoul  
       2012-03-15 09:18:46 +08:00
    @chairo 84年和85年同一天生日的话...时间戳是不一样的吧?
    guoquan
        27
    guoquan  
       2012-03-15 09:32:14 +08:00
    我觉得……你应该优雅的别这么存……
    chairo
        28
    chairo  
       2012-03-15 10:00:23 +08:00
    @xwsoul 当然时间戳不一样啊,怎么可能一样...不过前边我有个错误应该是'xxxx-xx-xx 00:00:00'和'xxxx-xx-xx 23:59:59'格式转成时间戳,年那少了一位...
    chairo
        29
    chairo  
       2012-03-15 10:02:47 +08:00
    @xwsoul 我刚明白你想要的需求。。。确实如果查所有人同月同日但不同年的话时间戳有点麻烦,Sorry没注意看,本来我理解的同一天就是同年同月同日
    xwsoul
        30
    xwsoul  
       2012-03-16 17:51:23 +08:00
    @chairo 呃..也是我没表述清楚...
    cute
        31
    cute  
       2012-03-23 21:18:40 +08:00
    echo wordwrap('201112', 4, '-', true);
    cute
        32
    cute  
       2012-03-23 21:37:45 +08:00
    或者echo substr_replace('201112', '-', 4, 0);
    airylinus
        33
    airylinus  
       2012-04-12 18:48:48 +08:00 via Android
    如果要谈论优雅,所有世界都存储为int
    Semon
        34
    Semon  
       2012-04-12 19:27:26 +08:00
    @vibbow +1
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2676 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:52 PVG 22:52 LAX 07:52 JFK 10:52
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86