我正在尝试根据以下条件格式化PHP中的SQL时间戳,但无法弄清楚如何。有人能指出我正确的方向吗?
我该怎么做?
答案 0 :(得分:1)
您可以通过PHP的diff()或msql datediff()
来检查日期差异http://www.php.net/manual/en/datetime.diff.php
然后检查差异是零还是等于1或大于7
h 12-hour format of an hour with leading zeros 01 through 12 date('H:i:s')
i Minutes with leading zeros 00 to 59
s Seconds, with leading zeros 00 through 59
G 24-hour format of an hour without leading zeros 0 through 23
USE DATE(G) to find AM or PM
if($TODAY)
date('h:i:s')PM
ELSE IF ($THISWEEK)
l (lowercase 'L') A
full textual representation of the day of the week Sunday through Saturday
ELSE IF($BEFOREONEWEEK)
date('d-m-y')
http://php.net/manual/en/function.date.php
这应该有效。希望如此: - )
答案 1 :(得分:1)
首先,您需要将MySQL时间转换为unix时间戳,这是大多数php日期函数使用的时间戳。如果您使用的是MySQLs DateTime类型,则可以使用MySQL函数unix_timestamp()mysql date functions在SQL中执行转换。或者你可以使用strtotime($ mysqlDateTime)函数php strtotime function
将mysql日期转换为PHP中的unix时间戳一旦你有你想要格式化的时间的unix时间戳,转换就会像这样(86400是24小时内的秒数):
function displayDate($timestamp)
{
$secAgo = time() - $timestamp;
// 1 day
if ($secAgo < 86400)
return date('h:i:A', $timestamp);
// 1 week
if ($secAgo < (86400 * 7))
return date('l', $timestamp);
// older than 1 week
return date('m/t/y', $timestamp);
}
此方法的好处是不需要在PHP中创建额外的对象(有点慢)或在SQL服务器上执行不必要的计算。也许有助于知道MySQL的时间戳类型将数据存储为unix时间戳(自1970年1月1日以来的秒数),与使用64位存储的日期时间相比,仅需要32位存储空间。对于每个人来说,32位应该足够了,直到2038年或其他什么......
答案 2 :(得分:1)
你只需要使用条件:
$now = new DateTime("now");
$ystrday = new DateTime("yesterday");
$weekAgo = new DateTime("now")->sub(new DateInterval('P7D'));
$inputDate = new DateTime(whenever);
if($yesterday < $inputDate and $inputDate < $now){
$outDate = date('g:ia', $inputDate->getTimestamp() );
}else if($weekAgo < $inputDate and $inputDate < $now){
$outDate = date('l', $inputDate->getTimestamp() );
}else if($inputDate < $weekAgo){
$outDate = date('d/m/y', $inputDate->getTimestamp() );
}
这尚未经过测试,您需要将mySql日期转换为php DateTime对象,但它应该让您非常接近。
答案 3 :(得分:1)
我假设您正在讨论MySQL TIMESTAMP
datatype,因为I don't think MySQL actually has a datatype like a Unix timestamp (i.e. seconds since epoch),所以您必须先使用strtotime
function转换日期:
$timestamp = strtotime($dbTimestamp);
这将返回您可以使用的Unix timestamp。
接下来,我们将定义几个时间戳来比较这个值:
首先,我们想知道今天午夜的时间戳。为此,您将字符串“today”传递给strtotime
:
$today = strtotime("today");
接下来,我们需要知道七天前的时间戳。您必须在"1 week ago"
和"1 week ago midnight"
之间进行选择。这两者之间的区别在于midnight
将返回当天上午12点的时间戳,而没有它的版本将在七天前返回当前时间(例如今天,差异将是是midnight
将于4月7日上午12点返回,而非午夜版本将于4月7日下午3:45返回:
$weekAgo = strtotime("1 week ago midnight");
(注意,strtotime
了解many formats,包括许多relative formats,例如上面使用的“今天”和“1周前”示例。)
接下来,我们需要定义要在每种情况下使用的date formats:
$timeOnly = "g:i A"; // This gives an "hour:minute AM/PM" format, e.g. "6:42 PM"
$dayOfWeek = "l" // Gives a full-word day of the week, e.g. "Sunday"
$mdy = "m/d/Y" // gives two-digit month and day, and 4-digit year,
// separated by slashes, e.g. "04/14/2011"
最后,我们只是进行比较,并使用date
function格式化我们的时间戳:
if ($timestamp >= $today) {
$date = date($timeOnly, $timestamp);
} elseif ($timestamp >= $weekAgo) {
$date = date($dayOfWeek, $timestamp);
} else {
$date = date($mdy, $timestamp);
}
这将为您提供一个名为$date
的字符串变量,其中包含数据库提供的相应格式的时间戳,您可以根据需要在页面上显示该时间戳。