【问题标题】:Javascript Date object returning December 31st 1969返回 1969 年 12 月 31 日的 Javascript 日期对象
【发布时间】:2014-01-20 04:49:37
【问题描述】:

如果您使用毫秒形式的日期,是否需要将其转换为字符串才能让 Date 对象识别?

"values":[ {x:1390636800000 , y:12} , 
           { x:1390640400000 , y:17} , 
           { x:1390644000000 , y:17}, 
           { x:1390647600000 , y:15}, 
           { x:1390651200000 , y:8} ]

如果是这样,我将如何转换它以便它被正确使用

chart.xAxis
 .axisLabel("Time (s)")
 .tickFormat(function(d){return d3.time.format('%I%p')(new Date(d))});

它没有吐出 1969 年 12 月/31 日的日期?我试图对整个对象进行字符串化,但这没有用。有什么建议么?感谢您的帮助,如果这是一个愚蠢的问题,对不起

(编辑)这是我正在使用的无法正确显示时间的工作代码

var chart;

nv.addGraph(function() {
  chart = nv.models.lineChart()
  .options({
   margin: {left: 100, bottom: 100},
   x: function(d,i) { return i},
   showXAxis: true,
   showYAxis: true,
   transitionDuration: 250
 })
 ;

 chart.xAxis
   .axisLabel("Time (s)")
   .tickFormat(function(d){return d3.time.format('%m/%d/%y')(new Date(d))});

 chart.yAxis
   .tickFormat(d3.format('d'))
   ;

 d3.select('#chart1 svg')
   .datum(data1())
   .call(chart);

 nv.utils.windowResize(chart.update);


 chart.dispatch.on('stateChange', function(e) { nv.log('New State:', JSON.stringify(e));    });

 return chart;
});

function data1() {

 return  [
   {
     "values":[ {x:1390636800000 , y:12} , { x:1390640400000 , y:17} , { x:1390644000000 , y:17}, { x:1390647600000 , y:15}, { x:1390651200000 , y:8} ],
  "key": "First Dude "
},
{
  "values": [ { x:1390636800000 , y:16} , { x:1390640400000 , y:16} , { x:1390644000000 , y:16}, { x:1390647600000 , y:12}, { x:1390651200000 , y:5}],
  "key": "Second Dude "
},
{
  "values": [ { x:1390636800000 , y:5} , { x:1390640400000 , y:5} , { x:1390644000000 , y:5}, { x:1390647600000 , y:3}, { x:1390651200000 , y:1}],
  "key": "Third Dude "
}
,
{
  "values": [ { x:1390636800000 , y:8} , { x:1390640400000 , y:18} , { x:1390644000000 , y:18}, { x:1390647600000 , y:9}, { x:1390651200000 , y:7}],
  "key": "Fourth Dude "
}
 ];

}

【问题讨论】:

  • 我怀疑还有其他事情发生。你能把这个问题的一个简短的工作例子放在一起吗?特别是,如果您不指定任何格式,轴会打印什么样的值?
  • 添加了一张图片以显示我正在处理的内容
  • 好的,我会尽快更新一个工作示例
  • 问题出在x: function(d,i) { return i}这一行;您是在告诉它使用索引值作为 x 值,而不是使用数据 x 值。因此,您的刻度格式化函数正在传递 0-100 的值,这些值都被解释为“零日期”。将这一行更改为x: function(d,i) { return d.x}(或完全省略它——这是 NVD3 的默认设置),你就可以开始了。
  • P.S.在询问有关其图形功能的问题时,请使用“nvd3.js”标签;使用他们的库时,有些事情更容易做,有些事情更难。

标签: javascript date d3.js nvd3.js


【解决方案1】:

如果您使用毫秒形式的日期,是否需要将其转换为字符串才能让 Date 对象识别它?

不,该值必须是数字(例如,1390636800000 而不是“1390636800000”)。如果提供了字符串,Date 将尝试解析它。

如果将time value 提供给 Date 构造函数,则假定它是自 1970-01-01T00:00:00Z 以来的毫秒数。即 UTC。

因此,如果您位于 UTC -5:00 的时区,那么

new Date(0);

将返回一个本地日期和时间为 1969-12-31T19:00:00UTC-05:00 的对象

【讨论】:

    【解决方案2】:

    日期不需要将毫秒数转换为字符串:

    > new Date(1390651200000)
    Sat Jan 25 2014 07:00:00 GMT-0500 (EST)
    

    要以您要查找的格式打印时间,您需要更改specifier string

    > d3.time.format('%I%p')(new Date(1390640400000))
    "04AM"
    > d3.time.format('%B/%d/%Y')(new Date(1390640400000))
    "January/25/2014"
    

    【讨论】:

    • 不,这不是我的意思。当我按照我在示例中的方式对其进行格式化时,它应该显示超过 5 小时的 x 值。相反,它每次只显示晚上 7 点,当我对其进行格式化以查看那是什么日期时,它最终成为 1969 年 12 月 31 日的日期。我认为从我的对象中提取有问题?
    • 你试过用 d.x 代替 d 吗?如果这不起作用,请尝试发布问题演示。
    • d.x 刚刚返回了 NaN
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    相关资源
    最近更新 更多