以毫秒为单位的字符串转换为日期对象Javascript

问题描述:

我在处理日期时间转换时遇到了此问题。我已经从PostgreSQL数据库的时间戳数据与这样一个以毫秒为单位的字符串转换为日期对象Javascript

格式“2011-04-04 19:27:39.92034”

为了在highcharts来显示它,我将其转换为日期或时间的对象。如果没有毫秒,我很容易将其与Date.js

转换但是毫秒无法与库进行处理。我也尝试过使用Date.parse,但总是得到NaN。

这个问题的解决方案?谢谢

+2

这些都是微秒,毫秒不和JavaScript时间分辨率毫秒开始..所以一些精度将会丢失。您需要提取该值,除以1000,追加到字符串并按照您得到的答案之一。否则你会有不正确的时间。 – 2011-04-04 12:39:32

+0

哦,我很抱歉。我的错。谢谢你纠正我,影子。感谢您的建议。我会试试看。 – 2011-04-07 08:05:16

+0

没问题让我知道你是否需要任何进一步的帮助。 :) – 2011-04-07 08:47:43

难道你不能只切断该字符串的最后6个字符?然后,您可能需要四舍五入才能最终为您添加第二个时间对象。内置的Date类

JS应该能够处理这个问题,和的getTime()可自1970年开始(UNIX时间)返回毫秒。不过要注意时区问题;构造函数可能会将日期/时间解释为本地,但自1970年以来,getTime()的毫秒数可能以UTC为单位,并且烘焙的转换难以消除。

new Date("2011-04-04 19:27:39.92034").getTime() 
1301941659920 
+1

不适用于Safari,Opera或Firefox(也可能是其他,这些都是我测试过的)。您必须用正斜杠替换连字符并删除小数秒。 – RobG 2011-04-04 12:41:01

+0

你是对的!我只在Chrome中测试过它。 – 2011-04-04 12:42:20

+0

wogh,我不知道。 – 2011-04-07 08:11:40

罗马的许多方法。给定的代码将返回'(datestr =)2011-4-4 19:27:39.92'。这是你在寻找什么?

var darr = '2011-04-04 19:27:39.92034'.split('.') 
    , dat=new Date(darr[0]) 
    , datestr = ''; 
dat.setMilliseconds(Math.round(darr[1]/1000)); 
datestr = [ [dat.getFullYear(),dat.getMonth()+1,dat.getDate()].join('-') 
      ,' ', 
      [dat.getHours(),dat.getMinutes(),dat.getSeconds()].join(':') 
      ,'.', 
      dat.getMilliseconds() 
      ].join(''); 
+1

感谢您的回答,Kooilnc。我尝试了你的代码,并且得到了NaN,但是在变量darr中用'/'替换' - '后,它就工作了。无论如何,你的代码真的启发了我。 :) – 2011-04-07 14:08:20

这是简单,在一个行:

new Date('01/09/2015 06:16:14.123'.split(".")[0])