2013-03-13 168 views
4

在PostgreSQL数据库中,我在时间戳列中保存了这个值:2013-03-15 08:50:00。 我的目标是从数据库中取出这个日期并检查,如果当前时间少于从数据库到12小时的时间。比较PostgreSQL中的javascript日期时间和时间戳

为此,我想从new Date()获得当前时间,并将其与数据库中的日期进行比较 - 但由于时间格式不同,这不起作用。

我怎么能做到这一点,并在相同(可比较)的格式转换那些时间?

+0

我喜欢使用date.js - http://www.datejs.com/ – 2013-03-13 21:18:28

+1

除非绝对有必要从客户端获取时间,为什么不从服务器使用您正在使用的任何应用程序代码来查询D b? – 2013-03-13 21:44:26

回答

5

var ds ='2013-03-15 08:50:00';

没有任何时区信息,你不能真正知道它是哪一天。 假设你的字符串在UTC,您可以使用日期构造 如果你更换一个“T”的空间,并在末尾加上“Z”:

var ds='2013-03-15 08:50:00'; 

var day=new Date(ds.replace(' ','T')+'Z'); 

day.toUTCString() 

周五,2013年3月15日08: 50:00 GMT

你可以写一个日期解析函数,将解析ISO或SQL格式,

这可能需要一些旧的浏览器。

Date.fromISO= function(s){ 
    var day, tz, 
    rx=/^(\d{4}\-\d\d\-\d\d([tT ][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/, 
    p= rx.exec(s) || []; 
    if(p[1]){ 
     day= p[1].split(/\D/); 
     for(var i= 0, L= day.length;i<L;i++){ 
      day[i]= parseInt(day[i], 10) || 0; 
     }; 
     day[1]-= 1; 
     day= new Date(Date.UTC.apply(Date, day)); 
     if(!day.getDate()) return NaN; 
      //adjust for time zone offset: 
     if(p[5]){ 
      tz= (parseInt(p[5], 10)*60); 
      if(p[6]) tz+= parseInt(p[6], 10); 
      if(p[4]== '+') tz*= -1; 
      if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz); 
     } 
     return day; 
    } 
    return NaN; 
} 

然后调用Date.fromISO( '2013年3月15日8点50分○○秒');