2016-07-22 168 views
2

我从服务器接收以下时间:转换伪日期字符串转换成JavaScript日期对象

"2010-11-30T23:00:00.000Z" 

这次被三个独立的输入字段outputed:

<input name="day" type="number" value={new Date(myTimeString).getDay()} /> 
<input name="month" type="number" value={new Date(myTimeString).getMonth()} /> 
<input name="year" type="number" value={new Date(myTimeString).getYear()} /> 

这导致三个输入被显示为相邻的一些值,如:1 - 12 - 2010

现在,当用户更改一个值时,可以说月份从1210我想抓住从服务器获得的原始时间字符串,并相应地改变它。

有没有“适当”的方法来做到这一点? 我能想到的只是存储原始时间,然后用str.replace方法覆盖特定索引。

在这种情况下,期望的结果将是:"2010-10-30T23:00:00.000Z"

+1

您可以使用MomentJS(http://momentjs.com)更简单的日期操作。用户编辑这些值,读取它们,然后使用momentJs进行简单的转换回服务器时间格式。使用替换也可以工作。我认为很难选择一种“适当”的方式来完成这项工作,只需要发布信息。例如,您是否使用任何其他框架或库?在值属性中使用“{}”表示我正在使用某种排序模板系统 – BBog

+0

我会看看那个 - 谢谢。是的,我正在使用ReactJS,但我不想将问题连接到它,因为它是一个正常的JS问题:) –

回答

1

,当涉及到日期通常你不应该做手工字符串操作。

首先,您需要将包含的字符串转换为Date对象。

var date = new Date('2010-11-30T23:00:00.000Z'); 

然后使用相应的Date.prototype.set*方法绑定相应字段的变化事件。例如setDate

document 
    .querySelector('input[name=day]') 
    .addEventListener('change', function setDay() { 
     var day = parseInt(this.value, 10); 
     date.setDate(day); 
    }) 

,然后用toISOString方法需要时转换日期字符串。

var dateStr = date.toISOString()