- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试修复出现在我的应用程序的生日组件中的错误。该组件以 1997-08-16T00:00:00Z
格式从其属性中获取出生日期。我遇到的问题是,当 DOB 设置为 state 时,它被设置为月份和日期的单个数字,而不是两位数的月份和日期。这是组件处理 DOB 的样子:
class DOB extends Component {
constructor(props) {
super(props);
if (props.value) {
const dv = moment(props.value).utc();
this.state = {
year: dv.year(),
month: dv.month() + 1,
day: dv.date()
};
} else {
this.state = { year: "", month: "", day: "" };
}
this.onFieldChanged = this.onFieldChanged.bind(this);
}
onFieldChanged(field) {
return event => {
const newValue = event.target.value;
if (!isDigits(newValue)) {
return;
}
const nextField = {
month: "day",
day: "year"
};
const n = this.refs[nextField[field]];
if (n && newValue.length === 2) {
n.focus();
}
this.setState({ [field]: newValue });
const { year, month, day } = { ...this.state, [field]: newValue };
const dateString = `${year}-${month}-${day}`;
if (year.length < 4 || month < 1 || day < 1) {
return;
}
const date = new Date(Date.parse(dateString));
const today = new Date();
if (date instanceof Date && !isNaN(date.valueOf())) {
if (
date.getFullYear() > 1800 &&
date.getFullYear() <= today.getFullYear() &&
date.getDate() > 0 &&
date.getDate() < 32 &&
date.getMonth() >= 0 &&
date.getMonth() < 12
) {
this.props.onChange({ target: { value: dateString } });
}
}
};
}
return (
<div className="dob-entry">
<input
type="tel"
ref="month"
placeholder="mm"
maxLength="2"
value={state.month}
onChange={this.onFieldChanged("month")}
/>{" "}
/
<input
type="tel"
ref="day"
placeholder="dd"
maxLength="2"
value={state.day}
onChange={this.onFieldChanged("day")}
/>{" "}
/
<input
className="number"
type="tel"
placeholder="yyyy"
ref="year"
maxLength="4"
value={state.year}
onChange={this.onFieldChanged("year")}
/>
</div>
);
}
export default DOB;
我想知道是否可以将状态设置为日期和月份的完整两位数值。在我的代码中,dv.year()
和 dv.month()
将它们设置为个位数。我尝试使用 const dvf = moment(dv).format('DD/MM/YYYY')
设置值并使用 .splice()
取出我的值每个字段都需要,但后端似乎期望 utc 值不仅仅是一串数字。我没有太多使用 moment,所以有很多我不了解它,但是它必须能够让它返回 2 位数的值吗?任何见解将不胜感激。
最佳答案
您可以通过多种方式解决此问题,最终由您决定哪种方式最适合您的应用。
我自己也没怎么用过 moment,但问题是 dv.month() 和 dv.date() 返回数值,所以像“08”这样的东西变成了 8。看来你想要这些值为 2 位字符串,因为无法将 08 存储为数字,它总是会更改为 8。
如果您的代码可以处理这些值作为字符串,您可以简单地调整在构造函数中设置状态的方式。 day: dv.date()
可以变成像 day: dv.date() > 9 这样的东西吗? dv.date().toString() : '0' + dv.date()
然后对 month
做类似的事情。
或者,您可以对输入日期字符串使用一些字符串操作,将日期和月份提取为 2 位数字字符串。 '1997-08-16T00:00:00Z'.slice(0, 10).split('-')[1]
将返回 '08' 和 '1997-08-16T00 :00:00Z'.slice(0, 10).split('-')[1]
将返回“16”。
上述这些方法意味着您将把日期和月份作为字符串处理,因此您必须确保您计划稍后对它们使用的任何方法都适用于字符串。
另一种选择是继续将日期和月份存储为数字,然后在您将值发送到服务器时将它们转换为字符串。
我认为这回答了您的问题?如果我遗漏了什么,请告诉我。
关于javascript - 无法使 moment().utc() 返回 2 位数的月份和年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65534678/
我正在完成一项让我难堪好几天的学校作业。任务是使用 View (VAvailableGolfers) 将与从组合框中选择的给定事件/年份无关的高尔夫球手填充到列表框中。以下是表中的数据: 那么,表单上
给定一年和那年的某一天,我如何获得完整的日期?例如:60/2014 = 2014 年 3 月 1 日 和 61/2016 = 2016 年 3 月 1 日 注释:-年和日可以作为单独的参数传递。 -结
我正在使用 ExtJS 3,当我想为日期选择器选择日期时,我只能设置日期和月份(通过左/右箭头)。月/年面板会放下来,但很快就会消失,因此无法选择它。这是最能描述该行为的桌面记录:http://fli
我正在尝试获取用于在 div 中显示当前月份和年份的 jquery 或 java 脚本代码,但目前还不能。我的意思是我想以这种格式显示当前的月份和年份:October 2012 这样每个月我都不需要编
我有这段代码可以从数据库中获取一个字段: $end_date=$row1['end_date']; 如果我打印它,它会给我这样的信息:25-09-2012我需要的是获取月份值、年份和日期。类似于: $
我有两个格式如下的数据集: df1 #> Artist Album Year #> 1 Beatles Sgt. Pepper's 1967 #>
我使用 jQuery 验证插件和 maskedInput 插件对输入进行了自定义日期和时间验证。 有没有办法在自定义验证中进行验证以防止输入大于当前年份的年份? 我的代码: $("#date").ma
我在 xml 解析方面没有经验,所以也许我写的一些东西对某些人来说看起来很愚蠢,也许我的一些术语不太正确。请原谅。 我开发了一个Android应用程序,它需要解析来自YR.no的天气数据。 。该组织提
我需要当前年份,月份和日期为3个不同的变量。下面的代码给出了日期时间 val now = Calendar.getInstance().getTime() 2016年9月29日星期四18:27:38
在模态对话框中使用日期选择器,请不要在 Firefox 19.0.2 中使用更改月/年下拉列表,请参阅: http://jsfiddle.net/469zV/2/ HTML
我希望日期输入在年份有 4 位数字后停止输入。我尝试使用 HTML 中的 min 和 max 组件,但它仍然允许您键入删除第一个数字。参见示例 1。 请参阅示例 2 以了解可以输入超过 4 位数字的年
因此不同是基于唯一的月/年,而不仅仅是一个不同的月份(所以我希望 2011 年 1 月和 2012 年 1 月是不同的) // Test set of data List Compl
在 Programming in the Key of C# 中,作者给出了一个示例(附源代码),说明如何将日期(年、月、日 -- 数字)打包为 32 位整数。在示例中,作者将信息打包如下: int
这里我有一个任务,如果我写这样的代码,年份应该像 1947 年到 2016 年一样绑定(bind)在 DropdownList 中 1947 2016 拍了一整天 最佳答案 例如,
显然,我的 SQL 不是最好的,但我想做的是通过查找条目中的最大年份和月份来获取数据库中的最新日期。现在我有: select max(Month), max(Year) from posts wher
我试图弄清楚是否有任何 ID 发生在任何早年(即 dfo 中的 Duplicate 列)。如果是这样,我想将该行标记为重复行并包括 ID 首次出现的年份(即 Year_Duplicate)。 我确实有
我已经从 df 中提取了列列表,这些列是字符串类型,如下所示:1999-1(如 1999 年第一个月)。 我想删除 2000 年之前的所有列,因此我提取了列列表并使用列表理解来检查字符串的第一个字符是
日期时间是什么时候?我的 DateTimePicker 控件的源更改为 null,我想选择另一个日期,日历下拉列表默认为最后选择的月份和年份。 我正在为 DOB 使用 DateTimePicker,因
我正在获取系统当前日期并尝试在 TextView 中显示它。 尝试下面的代码后 private OnClickListener listener1 = new OnClickListener() {
我想使用 knockoutJS 库验证年份。我面临的问题是,当用户输入错误的年份时,不会对年份进行验证。以下是年份错误的情况。 (01/01/12 becomes 01/01/0012) (01/0
我是一名优秀的程序员,十分优秀!