V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
summic
V2EX  ›  PHP

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

  •  
  •   summic · 2012-01-12 00:17:37 +08:00 · 5948 次点击
    这是一个创建于 4732 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   ·   实用小工具   ·   5620 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:20 · PVG 11:20 · LAX 19:20 · JFK 22:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.