js中转换Date日期格式,PHP跨时区应用解决方案_php技巧_脚本之家

1.将程序内部时区设置为UTC时间. PHP设置:
date_default_timezone_set; Yii设置: config/main.php 中添加
:’timeZone’=>’UTC’, 如此设置后,PHP生成的时间基本都是UTC时间了.例如:
//输出当前UTC时间 date; 2.数据库中存储UTC时间.
可以用PHP控制,也可以通过设置数据库时区来实现.
3.服务端发送到前端的时间均为UTC时间格式,
由JS将其转换为本地时间后进行显示.JS内部数据与显示数据分离.
JS转换函数参考: 复制代码 代码如下: /**
* 将UTC时间转为本地时间 * @param string utcTime utc时间字符串 格式
:’Y-m-d H:i:s’ * @return string 本地时间字符串 格式 :’Y-m-d H:i:s’ */
function utcToLocal { if(utcTime===’0000-00-00 00:00:00′ ||
utcTime===null || utcTime===” || utcTime===undefined) return utcTime;
var locTime = new Date(); //local时间对象
utcTime=utcTime.replace.replace; //火狐不兼容’-‘分隔日期
//解析字符串及本地时间赋值 locTime.setTime-locTime.getTimezoneOffset;
//本地时间字符串格式化 var year = locTime.getFullYear(); var month =
preZero; var date = preZero; var hour = preZero; var minute = preZero;
var second = preZero; return year+’-‘+month+’-‘+date+’
‘+hour+’:’+minute+’:’+second; } /** * 将本地时间转为UTC时间 * @param
string locTime utc时间字符串 格式 :’Y-m-d H:i:s’ * @return string
本地时间字符串 格式 :’Y-m-d H:i:s’ */ function localToUtc {
if(locTime===’0000-00-00 00:00:00′ || locTime===’0000-00-00′ ||
locTime===null || locTime===” || locTime===undefined) return locTime;
var tmpTime = new Date(); var utcTime = new Date();
locTime=locTime.replace.replace; //火狐不兼容’-‘分隔日期 //解析字符串
tmpTime.setTime; if { var year = tmpTime.getUTCFullYear(); var month =
preZero+1); var date = preZero; var hour = preZero); var minute =
preZero(tmpTime.getUTCMinutes; var second =
preZero(tmpTime.getUTCSeconds; return year+’-‘+month+’-‘+date +’
‘+hour+’:’+minute+’:’+second; } else { //设置日期,保留本地时间
utcTime.setFullYear);
utcTime.setMonth;utcTime.setMonth;//?若不重复,则赋值无效
utcTime.setDate; var year = utcTime.getUTCFullYear(); var month =
preZero+1); var date = preZero; return year+’-‘+month+’-‘+date; } }
//单个数字添加前导0 function preZero { return str.toString().length<2
? ‘0’+str : str; }

1.例如:2017-01-01 12:00:00

2、实际应用中经常会遇到加减时间的情况,如:昨天这个时间到今天这个时间间系统共登陆了几次之类的。因此在我们取得当前时间之后就要减去一天或几天。

2.例如:2017/01/01T11:00:00

得到的结果就是:Mon Jun 15 15:44:50 UTC+0800 2009 |
2009年6月15日15时44分50秒

  return year + ‘-‘ + month + ‘-‘ + date + ‘ ‘ + hour + ‘:’ + minute +
‘:’ + second;
};

 

  /*统一月,日,时,分,秒的格式*/

   var date = new Date();

/*格式化时间字符串*/

     var date = new Date();

  var year = datetime.getFullYear();/*年*/
  var month = datetime.getMonth() + 1;/*月*/
  var date = datetime.getDate();/*日*/
  var hour = datetime.getHours();/*时*/
  var minute = datetime.getMinutes();/*分*/
  var second = datetime.getSeconds();/*秒*/

   alert(dateNum);

变成2017/01/01 11:00:00格式

   var dateMid = date.getTime() –
(oneDate * 24 * 60 * 60 * 1000)

下面是我自己写的格式化日期字符串的函数,虽然并不完善,但是暂时也没有发现什么问题

如何将2015-03-12 12:00 转换成标准时间()?

  month = month < 10 ? ‘0’ + month : month;
  date = date < 10 ? ‘0’ + date : date;
  hour = hour < 10 ? ‘0’ + hour : hour;
  minute = minute < 10 ? ‘0’ + minute : minute;
  second = second < 10 ? ‘0’ + second : second;

 

 

   var oneDate = 1

/*datetimeString:符合时间格式的时间字符串*/
/*返回格式化之后的时间字符串:YYYY-MM-DD
hh:mm:ss*/
formatDatetime = function (datetimeString) {
  var datetime;
  if (isNaN(Date.parse(datetimeString)))
    datetime = new Date(Date.parse(datetimeString.replace(/-/g,
‘/’).replace(/T/g, ‘ ‘)));
  else
    datetime = new Date(Date.parse(datetimeString));

 var year = datetime.getFullYear();
 var month = datetime.getMonth()+1;//js从0开始取 
 var date = datetime.getDate(); 
 var hour = datetime.getHours(); 
 var minutes = datetime.getMinutes(); 
 var second = datetime.getSeconds();
 
 if(month<10){
  month = “0” + month;
 }
 if(date<10){
  date = “0” + date;
 }
 if(hour <10){
  hour = “0” + hour;
 }
 if(minutes <10){
  minutes = “0” + minutes;
 }
 if(second <10){
  second = “0” + second ;
 }
 
 year = year.toString();
编程, year = year.substring(2);
 var time1 = year+”年”+month+”月”+date+”日”;
 var time2 = hour+”时”+minutes+”分”;//09年06月12日 17时18分
 var time={time1:time1,time2:time2}    //json格式
// alert(time);
 return time; 
}

在其他浏览器中,使用这个格式的字符串进行new
Date操作没有问题,但是在Safari中会提示Invalid Date;

function dateToStr(datetime){ 

Safari中不支持’-‘格式的日期字符串,将其替换成’/’ 变成2017/01/01
12:00:00即可正常使用

在此我们现将得到的时间转换下:

此格式的日期字符串在Safari中也是不得到支持的,需要将字符串中的’T’  
替换成空格

function dateToComm(datetime){    

在js中处理Date时,发现Safari和其他浏览器的支持方式不一致

 

//将date型转换为tring 

//传来的datetime是:Wed Mar 04 2009 11:05:05 GMT+0800格式
得到结果:09年06月12日 17时18分

 

要转换为Sreing型  按照上面1的方法转换就可以了。

这可能不是我们所需要的,因此是需要转换下的,这里就学下我转换的几种方法,不妥之处请指教:

}

若date 为:Mon Jun 15 15:44:50 UTC+0800 2009  

    var date = new Date();

 var year = datetime.getFullYear();
 var month = datetime.getMonth()+1;//js从0开始取 
 var date = datetime.getDate(); 
 var hour = datetime.getHours(); 
 var minutes = datetime.getMinutes(); 
 var second = datetime.getSeconds();
 
 if(month<10){
  month = “0” + month;
 }
 if(date<10){
  date = “0” + date;
 }
 if(hour <10){
  hour = “0” + hour;
 }
 if(minutes <10){
  minutes = “0” + minutes;
 }
 if(second <10){
  second = “0” + second ;
 }
 
 var time = year+”-“+month+”-“+date+” “+hour+”:”+minutes+”:”+second;
//2009-06-12 17:18:05
// alert(time);
 return time;
}

 

以下是转换成另两种格式的,和上面是大同小异的:

     alert(date+”  |  “+year+”年”+month+”月”+date1+”日”+hour+”时”+minutes +”分”+second+”秒”
);

 

js方法返回值:Thu Mar 19 2015 12:00:00 GMT+0800 (中国标准时

 

 

(2)

1.js方法返回值:2015-03-19

}

   alert(dateBefore);

  1. var formatDate = function (date) {  
  2.     var y = date.getFullYear();  
  3.     var m = date.getMonth() + 1;  
  4.     m = m < 10 ? ‘0’ + m : m;  
  5.     var d = date.getDate();  
  6.     d = d < 10 ? (‘0’ + d) : d;  
  7.     return y + ‘-‘ + m + ‘-‘ + d;  
  8. };  

 

function date(){

function date(){

     var year =
date.getFullYear();
     var month =
date.getMonth()+1;    //js从0开始取 
     var date1 = date.getDate(); 
     var hour = date.getHours(); 
     var minutes =
date.getMinutes(); 
     var second =
date.getSeconds();

在javascript中直接输出Date得到的结果是这样的:

注意:date.getMonth()得到的月是从0开始的,date所有的get方法除了date.getFullYear()得到的是2009外,其余的get方法得到的数若小于10,都是以单数出现,如6月,date.getMonth()+1 = 6
若要得到两位的自己加上0就可以了,如下面的转换方法。

  1. var formatDateTime = function (date) {  
  2.     var y = date.getFullYear();  
  3.     var m = date.getMonth() + 1;  
  4.     m = m < 10 ? (‘0’ + m) : m;  
  5.     var d = date.getDate();  
  6.     d = d < 10 ? (‘0’ + d) : d;  
  7.     var h = date.getHours();  
  8.     var minute = date.getMinutes();  
  9.     minute = minute < 10 ? (‘0’ + minute) : minute;  
  10.     return y + ‘-‘ + m + ‘-‘ + d+’ ‘+h+’:’+minute;  
  11. };  
    调用:formatDate(Date())   formatDate(Date())

1、得到new Date()型中各个时间级别(年、月、日、时、分、秒)的数:

 

//将date型转换为tring 

2.js方法返回值:2015-03-19
12:00

(1)

 

那如何用js格式化date日期值呢?

调用:parserDate(“2015-03-19 12::00:00”)

我们以一天为例,得到一天前的此时:

function date(){

function date(){

 

    alert(date);

   var dateBefore = new
Date(dateMid);

结果是:Mon Jun 15 15:30:46 UTC+0800 2009

   var dateNum date.getTime();

得到的是:2592000000     这个是距
1970 年 1 月 1 日之间的毫秒数。

注:getTime() 方法可返回距 1970 年 1 月 1
日之间的毫秒数。

}

}

Thu Mar 19 2015 12:00:00 GMT+0800 (中国标准时间)
  1. var parserDate = function (date) {  
  2.     var t = Date.parse(date);  
  3.     if (!isNaN(t)) {  
  4.         return new Date(Date.parse(date.replace(/-/g, “/”)));  
  5.     } else {  
  6.         return new Date();  
  7.     }  
  8. };  

//传来的datetime是:Wed Mar 04 2009 11:05:05 GMT+0800格式  得到结果:2009-06-12 17:18:05

   var date = new Date();

则输出:Mon Jun 14 15:44:50 UTC+0800 2009