如何使用react-datetime获取所选日期?

时间:2017-05-18 17:38:57

标签: reactjs datetime react-datetime

我正在使用react-datetime开箱即用。

现在,我正在尝试将所选日期保存到date状态。

import DateTime from 'react-datetime';
import '../DateTime.css';

class SomeClass extends React.Component {
  render(){
    return (
      <div>
        <DateTime onChange={this.props.handleDate}/>
      ...

上述程序有效 - 它会显示一个简单的框,当有人点击它时会显示日历。

以下是handleDate方法:

  ...
  handleDate(e){
    this.setState({date: e.target.value}, () => console.log(this.state.date))
  };

它适用于我常规的'react-bootstrap组件:<FormControl type="date" onChange={this.props.handleDate} />,但当我使用DateTime时,它表示其值未定义。 “Schedule.js:135 Uncaught TypeError: Cannot read property 'value' of undefined

我正在查看npm site中的API,但没有看到任何显示如何获取数据的示例。我可能会重读它。

如何使用DateTime获取所选日期的值? e.target.value似乎不适用于此案例。

3 个答案:

答案 0 :(得分:5)

来自文档: 日期更改时的回调触发器。如果输入中的日期有效,则回调会将所选时刻对象作为唯一参数接收。如果输入中的日期无效,则回调将接收输入的值(字符串)。

使用此信息,处理程序应如下所示:

handleDate(date){
   this.setState({date}); # ES6 
};

答案 1 :(得分:1)

要添加到Oluwafemi Sule的答案中,要从矩对象中获取日期对象,您需要使用.toDate(),并且不使用任何内部属性(例如_d)。

  

Moment使用一种称为“时代转移”的技术来导致这种情况   属性有时与   片刻反映。特别是在使用Moment TimeZone的情况下,   属性几乎永远不会与Moment的实际值相同   将从其公共.format()函数输出。因此,   _d和任何其他以_开头的属性均不得用于任何目的。

     

要打印出Moment的值,请使用.format()、. toString()或   .toISOString()。

     

要从Moment中检索本地Date对象,请使用.toDate()。这个   函数返回正确偏移的日期以与第三者交互   派对API。

Moment.js Guide

答案 2 :(得分:0)

已经晚了,但是会帮助别人的。

euclid <- function(points1, points2) { f <- function(x) as.list(data.frame(t(x))) outer(f(points1), f(points2), function(row, col) { mapply(function(x, y) sqrt(sum((x - y) ^ 2)), row, col) }) } centroid <- colMeans # you should use colMeans, not rowMeans k_means <- function(x, centers, distFun) { prevClusters = NULL prevCenters = NULL repeat { distsToCenters = distFun(x, centers) clusters = max.col(-distsToCenters) centers = t(vapply(split.data.frame(x, clusters), centroid, numeric(ncol(x)))) if (identical(prevClusters, clusters)) break prevClusters = clusters prevCenters = centers } list(clusters = clusters, centers = centers) } data <- data # Data frame ktest <- as.matrix(data) # Turn into a matrix centers <- ktest[sample(nrow(ktest), 5),] # Sample some centers, e.g. 5 res <- k_means(ktest, centers, euclid)

import Datetime from 'react-datetime';