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

请问如何用PHP写出一个根据日期变化的内容?

  •  
  •   tension · 2013-07-25 00:39:15 +08:00 · 3822 次点击
    这是一个创建于 4143 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如 现在是25号 00:35

    $class = "A";

    到26号00:00 $class= "B";

    到27号00:00 $class= "C";

    到28号00:00 $class= "D";

    到29号00:00 $class= "A";

    这样一直循环下去
    19 条回复    1970-01-01 08:00:00 +08:00
    jybox
        1
    jybox  
       2013-07-25 00:50:16 +08:00   ❤️ 2
    $class = ["A", "B", "C", "D"][(intval(gmdate("j")) - 1) % 4];

    PHP5.5没问题,低版本的话你可能需要拆成几句话...
    awebird
        2
    awebird  
       2013-07-25 00:52:40 +08:00   ❤️ 1
    单纯php不行吧,我觉得上面的映射逻辑写在一个php里,再加定时任务在你要的触发时间点去调用..
    saharabear
        3
    saharabear  
       2013-07-25 00:59:42 +08:00   ❤️ 1
    用PHP就行,不需要cron,我觉得你要的就是动态调用。

    对了,要不就别用class,用闭包封装到array里面,我不知道你说的那个$class是不是一个类,还仅仅是一个变量的表示。

    反正最简单的办法就是放在array里面,用日期当key,对象当value,到了时间去array中遍历出合适的然后调用。
    tension
        4
    tension  
    OP
       2013-07-25 01:09:18 +08:00
    @jybox 5.5 还不行... 没那么高级...
    @awebird 定时任务 太麻烦...
    @saharabear 就是动态调用

    class 是一个变量, 我在模板里写
    if ($class=='A') {
    内容
    } elseif ($class=='B') {
    内容
    } elseif ($class=='C') {
    内容
    } else ($class=='D') {
    内容
    }

    所以我想用php解决
    haiyang416
        5
    haiyang416  
       2013-07-25 01:25:42 +08:00 via Android   ❤️ 1
    @tension 版本低的话把一楼的拆成几个部分就行了,就是一个数组,根据当前时间来获取值。不过不是完整的环,是从1号为A开始,结尾有几种,作个判断就想行。
    duhastmich
        6
    duhastmich  
       2013-07-25 06:46:17 +08:00   ❤️ 1
    current(array_slice(array("A", "B", "C", "D"), (int)(time() / 86400) % 4));
    我猜这个php4也能跑
    justfindu
        7
    justfindu  
       2013-07-25 09:01:57 +08:00
    为啥高端的人类都喜欢把函数一个个个个个个个多套在一起~
    这就是在执行之前取日期~ 然后根据日期取模或者啥来判断么~ 多简单的事儿~
    tension
        8
    tension  
    OP
       2013-07-25 09:18:36 +08:00
    @justfindu 求公式!
    CoX
        9
    CoX  
       2013-07-25 09:24:17 +08:00   ❤️ 2
    date('d')%4
    justfindu
        10
    justfindu  
       2013-07-25 09:28:21 +08:00   ❤️ 1
    @CoX + 10086 , 然后判断 取模数值 1 对应输出什么 2 对应输出什么 3对应输出什么 0 对应输出什么
    @tension
    raquelken
        11
    raquelken  
       2013-07-25 09:36:55 +08:00   ❤️ 1
    @tension 根据@CoX, echo chr(64+date('d')%4);
    tension
        12
    tension  
    OP
       2013-07-25 10:16:26 +08:00
    @raquelken 啊?
    tension
        13
    tension  
    OP
       2013-07-25 10:17:12 +08:00
    @raquelken 输出的是A...
    raquelken
        14
    raquelken  
       2013-07-25 10:23:53 +08:00   ❤️ 1
    @tension 粗心了,按照你的需求应该是chr(65+(date('d')-1)%4)
    raquelken
        15
    raquelken  
       2013-07-25 10:25:37 +08:00   ❤️ 1
    @tension 验证下
    php > echo chr(65+(25-1)%4);
    A
    php > echo chr(65+(26-1)%4);
    B
    php > echo chr(65+(27-1)%4);
    C
    php > echo chr(65+(28-1)%4);
    D
    php > echo chr(65+(29-1)%4);
    A
    tension
        16
    tension  
    OP
       2013-07-25 10:30:14 +08:00
    谢谢!!!!!!!!
    awebird
        17
    awebird  
       2013-07-25 11:23:36 +08:00
    如果7月31号->8月1号想连续的话,最好是用时间戳比较吧
    <?php
    ini_set('date.timezone','PRC');
    $base = strtotime("2013-07-25 00:00");
    $cur = time();
    //$cur = strtotime("2013-08-01 03:00");
    $diff = floor(($cur - $base)/(24*60*60));
    $class=chr(65 + $diff % 4);
    echo $class;
    Showfom
        18
    Showfom  
       2013-07-25 11:34:08 +08:00
    小 T 啊!
    msg7086
        19
    msg7086  
       2013-07-25 14:47:09 +08:00
    @jybox 你这个可以直接写成

    $class = 'ABCD'[(intval(gmdate("j")) - 1) % 4];

    PHP的字符串可以直接用下标引用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5842 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:29 · PVG 14:29 · LAX 22:29 · JFK 01:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.