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

2013-07-25 00:39:15 +08:00
 tension
例如 现在是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";

这样一直循环下去
3837 次点击
所在节点    PHP
19 条回复
jybox
2013-07-25 00:50:16 +08:00
$class = ["A", "B", "C", "D"][(intval(gmdate("j")) - 1) % 4];

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

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

反正最简单的办法就是放在array里面,用日期当key,对象当value,到了时间去array中遍历出合适的然后调用。
tension
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
2013-07-25 01:25:42 +08:00
@tension 版本低的话把一楼的拆成几个部分就行了,就是一个数组,根据当前时间来获取值。不过不是完整的环,是从1号为A开始,结尾有几种,作个判断就想行。
duhastmich
2013-07-25 06:46:17 +08:00
current(array_slice(array("A", "B", "C", "D"), (int)(time() / 86400) % 4));
我猜这个php4也能跑
justfindu
2013-07-25 09:01:57 +08:00
为啥高端的人类都喜欢把函数一个个个个个个个多套在一起~
这就是在执行之前取日期~ 然后根据日期取模或者啥来判断么~ 多简单的事儿~
tension
2013-07-25 09:18:36 +08:00
@justfindu 求公式!
CoX
2013-07-25 09:24:17 +08:00
date('d')%4
justfindu
2013-07-25 09:28:21 +08:00
@CoX + 10086 , 然后判断 取模数值 1 对应输出什么 2 对应输出什么 3对应输出什么 0 对应输出什么
@tension
raquelken
2013-07-25 09:36:55 +08:00
@tension 根据@CoX, echo chr(64+date('d')%4);
tension
2013-07-25 10:16:26 +08:00
@raquelken 啊?
tension
2013-07-25 10:17:12 +08:00
@raquelken 输出的是A...
raquelken
2013-07-25 10:23:53 +08:00
@tension 粗心了,按照你的需求应该是chr(65+(date('d')-1)%4)
raquelken
2013-07-25 10:25:37 +08:00
@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
2013-07-25 10:30:14 +08:00
谢谢!!!!!!!!
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
2013-07-25 11:34:08 +08:00
小 T 啊!
msg7086
2013-07-25 14:47:09 +08:00
@jybox 你这个可以直接写成

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

PHP的字符串可以直接用下标引用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/76883

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX