请帮我创建一个转换日期的功能,如
2010-10-04 17:45:50
进入更像
的东西10 October at 17:45
因此,如果不需要它们可以隐藏数年,并显示日期
today/yesterday at 17:45
这有点类似于Facebook显示过去日期的方式。
答案 0 :(得分:6)
尝试使用此类: 我定义了一些常量转换为西班牙语,但你可以忽略它们或为其他函数制作验证语言!
您可以专注于这些功能: shortDateHuman(),longDateHuman(),shortTimeHuman(),longTimeHuman()
要使用它,您可以执行:$datetest=new Date($language);
然后使用
$datetest->longDateHuman();
此外,如果需要,您可以检查 setGMTOffset 功能。
class Date {
var $gmtoffset;
var $year;
var $month;
var $day;
var $hour;
var $minute;
var $second;
var $idioma;
function Date($lang) {
//setlocale (LC_TIME,en_US);
list($this->year, $this->month, $this->day) = split("-", gmdate("Y-m-d"));
list($this->hour, $this->minute, $this->second) = split(":", gmdate("g:i:s"));
$this->gmtoffset = 0;
$this->idioma=$lang;
}
function getYear() {
return $this->year;
}
function setYear($year) {
$year = intval($year);
if($year >= 0) {
$this->year = $year;
} else {
//throw new Exception("Invalid year! Prior to 0 A.D.!");
}
return true;
}
function getMonth() {
return $this->month;
}
function setMonth($month) {
$month = intval($month);
if(($month >= 1) && ($month <= 12)) {
$this->month = $month;
} else {
//throw new Exception("Invalid month! Not between 1 and 12!");
}
return true;
}
function getDay() {
return $this->day;
}
function setDay($day) {
$day = intval($day);
if(($day >= 1) && ($day <= 31)) {
$this->day = $day;
} else {
//throw new Exception("Invalid day! Not between 1 and 31!");
}
return true;
}
function getHour() {
return $this->hour;
}
function setHour($hour) {
$hour = intval($hour);
if(($hour >= 0) && ($hour <= 23)) {
$this->hour = $hour;
} else {
//throw new Exception("Invalid hour! Not between 0 & 23!");
}
return true;
}
function getMinute() {
return $this->minute;
}
function setMinute($minute) {
$minute = intval($minute);
if(($minute >= 0) && ($minute <= 59)) {
$this->minute = $minute;
} else {
//throw new Exception("Invalid minute! Not between 0 and 59!");
}
return true;
}
function getSecond() {
return $this->second;
}
function setSecond($second) {
$second = intval($second);
if(($second >= 0) && ($second <= 59)) {
$this->second = $second;
} else {
//throw new Exception("Invalid second! Not between 0 and 59!");
}
return true;
}
function getGMTOffset() {
return $this->gmtoffset;
}
function setGMTOffset($gmtoffset) {
$gmtoffset = intval($gmtoffset);
if(($gmtoffset >= -12) && ($gmtoffset <= 12)) {
$this->gmtoffset = $gmtoffset;
} else {
//throw new Exception("Invalid GMT offset! Not between -12 and 12!");
}
return true;
}
function setDate($year, $month, $day) {
$this->setYear($year);
$this->setMonth($month);
$this->setDay($day);
return true;
}
function setTime($hour, $minute, $second, $gmtoffset = 0) {
$this->setHour($hour);
$this->setMinute($minute);
$this->setSecond($second);
$this->setGMTOffset($gmtoffset);
return true;
}
function setDateTime($year, $month, $day, $hour, $minute, $second, $gmtoffset) {
$this->setDate($year, $month, $day);
$this->setTime($hour, $minute, $second, $gmtoffset);
return true;
}
function timestamp() {
# This function returns a user's correct timezone in the form
# of a unix timestamp.
return mktime($this->hour + $this->gmtoffset,
$this->minute,
$this->second,
$this->month,
$this->day,
$this->year);
}
function longDateTimeHuman() {
# Returns a date string like "Saturday, November 5, 2005 3:25 PM".
return date("l, j F, Y g:i A", $this->timestamp());
}
function diaSemana(){
# Returns a day string like "Saturday".
return date("l", $this->timestamp());
}
function mes(){
# retorna un string del mes "November".
return date("F", $this->timestamp());
}
function diaSemana_es($diaen){
switch($diaen)
{
case "Saturday": return("Sábado");break;
case "Sunday": return("Domingo");break;
case "Monday": return("Lunes");break;
case "Tuesday": return("Martes");break;
case "Wednesday": return("Miércoles");break;
case "Thursday": return("Jueves");break;
case "Friday": return("Viernes");break;
}
}
function mes_es($mesen){
switch($mesen)
{ case "January": return(_JAN);break;
case "February": return(_FEB);break;
case "March": return(_MAR);break;
case "April": return(_APR);break;
case "May": return(_MAY);break;
case "June": return(_JUN);break;
case "July": return(_JUL);break;
case "August": return(_AUG);break;
case "September": return(_SEP);break;
case "October": return(_OCT);break;
case "November": return(_NOV);break;
case "December": return(_DEC);break;
}
}
function longDateHuman() {
# Returns a date string like "Saturday, November 5, 2005".
if($this->idioma=="en")
return date("l, j F , Y", $this->timestamp());
else
{
return "".$this->diaSemana_es($this->diaSemana()).", ".$this->mes_es($this->mes())." ".$this->day.", ".$this->year;
}
}
function shortDateHuman() {
# Returns a date string like "November 5, 2005".
return date("F j, Y", $this->timestamp());
}
function longTimeHuman() {
# Returns a time like "3:32:56 PM". F j of Y, g:i a
return date("g:i:s A", $this->timestamp());
// return date("F j of Y", $this->timestamp());
}
function shortTimeHuman() {
# Returns a time like "3:32 PM".
return date("g:i A", $this->timestamp());
}
function militaryTime() {
# Returns a time like "15:34:24".
return date("h:i:s", $this->timestamp());
}
function SQLDate() {
return date("Y-m-d", $this->timestamp());
}
function SQLDate_convertir($timestamp){
// echo date("Y-m-d", $timestamp);
// echo $timestamp;
// $aux=getdate($timestamp);
// $aux=mktime($timestamp);
// $aux=gmstrftime($timestamp);
//echo
// print_r(getdate($timestamp));
// $aux=$timestamp;
//$aux=date("Y-m-d", $timestamp);
$aux=split(" ",$timestamp);
//print_r($aux);
return $aux[0];
}
function SQLTime() {
return date("h:i:s", $this->timestamp());
}
function SQLDateTime() {
return date("Y-m-d h:i:s", $this->timestamp());
}
}
答案 1 :(得分:4)
所选答案与问题100%匹配。第二个做得更好(链接)。我还要指出Carbon,这是一个帮助约会的课程。您可能正在寻找的功能是:
echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2 minutes ago'
答案 2 :(得分:3)
我喜欢this function。它的输入是一个unix时间戳,这是自1970年1月1日以来的秒数。
public function FormatTime($timestamp)
{
// Get time difference and setup arrays
$difference = time() - $timestamp;
$periods = array("second", "minute", "hour", "day", "week", "month", "years");
$lengths = array("60","60","24","7","4.35","12");
// Past or present
if ($difference >= 0)
{
$ending = "ago";
}
else
{
$difference = -$difference;
$ending = "to go";
}
// Figure out difference by looping while less than array length
// and difference is larger than lengths.
$arr_len = count($lengths);
for($j = 0; $j < $arr_len && $difference >= $lengths[$j]; $j++)
{
$difference /= $lengths[$j];
}
// Round up
$difference = round($difference);
// Make plural if needed
if($difference != 1)
{
$periods[$j].= "s";
}
// Default format
$text = "$difference $periods[$j] $ending";
// over 24 hours
if($j > 2)
{
// future date over a day formate with year
if($ending == "to go")
{
if($j == 3 && $difference == 1)
{
$text = "Tomorrow at ". date("g:i a", $timestamp);
}
else
{
$text = date("F j, Y \a\\t g:i a", $timestamp);
}
return $text;
}
if($j == 3 && $difference == 1) // Yesterday
{
$text = "Yesterday at ". date("g:i a", $timestamp);
}
else if($j == 3) // Less than a week display -- Monday at 5:28pm
{
$text = date("l \a\\t g:i a", $timestamp);
}
else if($j < 6 && !($j == 5 && $difference == 12)) // Less than a year display -- June 25 at 5:23am
{
$text = date("F j \a\\t g:i a", $timestamp);
}
else // if over a year or the same month one year ago -- June 30, 2010 at 5:34pm
{
$text = date("F j, Y \a\\t g:i a", $timestamp);
}
}
return $text;
}
答案 3 :(得分:0)
您可能还想看一下CakePHP助手。他们的TimeHelper做你想做的事。