0

我的 java 脚本应用程序使用 .net Web 服务从后端获取数据。除了日期/时间转换外,一切正常。我需要将服务返回的纪元日期转换为用户的本地浏览器日期。

Web 服务以以下格式返回日期,

/Date(1335341422660-0500)/ 

这就是我将其转换为人类可读日期所做的工作,

我去掉连字符 (-) 之后的所有内容,并使用剩余的数据进行日期转换

var dateVal=dateField.replace(/-.*\)/g,')');                           
var date = new Date(parseFloat(dateVal.substr(6)));


   var dateArray=date.toString().split(" ");
   if(dateArray.length>3){
  timeZone=("("+dateArray[4])+")"
    }

 var month=date.getMonth() + 1;
 var year=date.getFullYear();
 var date=date.getDate();
 var hours= date.getHours();
 var offset=date.getTimezoneOffset();
 var finalDateStr=(year+"-"+month+"-"+dateValue)+" "+hours+":"+
                            minutes+":"+seconds+" "+timeZone;

对于上述纪元值,预期日期为,

2012 年 4 月 24 日晚上 9:10:22 - 此日期显示在 .net 应用程序中,该应用程序实际上是在创建/更新新项目时将此日期插入 MS SQL 服务器的源应用程序。他们将 SQL 服务器日期转换为本地日期(使用 .net)并在 UI 中显示。

但是当我使用上面的脚本形成日期时,我得到的值是,

2012-4-25 4:10:22 (EDT)(比上述日期多 7 小时)。

我不确定我错在哪里..有人可以帮我解决这个问题吗?

4

2 回答 2

0

对于此类日期操作,您可能需要考虑使用Moment.js

于 2013-01-28T19:55:41.220 回答
0

不确定这是否是解决此问题的好方法...

这就是我所做的并且似乎工作正常......我再次认为这不是一个万无一失的解决方案,但我检查了不同的时区(有/没有夏令时),它似乎工作......

 var dateVal=dateField.replace(/-.*\)/g,')');                           
                            var date = new Date(parseFloat(dateVal.substr(6)));

                            var dateArray=date.toString().split(" ");
                            var timeZone="(Local Time)";
                            if(dateArray.length>3){
                                timeZone=("("+dateArray[4])+")"
                            }
var date2=dateField.split("-");
                     var dateOffset=(date2[1].toString().replace(")","").replace("/",""));

if( date.toString().toUpperCase().indexOf("DT")!==-1){                        
 date.setHours(date.getHours()-(parseFloat(parseFloat(dateOffset).toString().replace(/0*$/, ''))+2));
}else{
 date.setHours(date.getHours()-(parseFloat(parseFloat(dateOffset).toString().replace(/0*$/, ''))+1));
}


                            var month=date.getMonth() + 1;
                            var year=date.getFullYear();
                            var dateValue=date.getDate();
                            var hours= date.getHours();                              
                            var minutes= date.getMinutes();
                            var seconds=date.getSeconds()
                            var finalDateStr=(year+"-"+month+"-"+dateValue)+" "+hours+":"+
                            minutes+":"+seconds+" "+timeZone;
于 2013-01-28T23:10:00.390 回答