2017-06-29 88 views
0

我负责为JSON数据库中的数据构建前端。当与日工作时,信息存储格式为:将日期的一部分作为单独变量获取

16年12月31日

我需要separatly使用这些值。有没有办法让变量像这样?:

var month = 12 
var day = 31 
var year = 16 
+0

dateString.split( “/”)[MDN String.split](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/splitk) – mplungjan

+0

JavaScript的有一个Date对象:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date –

+0

@ Matt.C - 在这里似乎不需要 – mplungjan

回答

1

假设你的日期是一个字符串。你可以将它拆分为/,这将导致一个数组。之后使用数组索引那里获得价值

var _date = "12/31/16", 
 
    splitDate = _date.split("/"), 
 
    month = splitDate[0], 
 
    day = splitDate[1], 
 
    year = splitDate[2]; 
 
console.log(month, day, year)

+2

更好些,用数组破坏。 –

+3

@VictoryOsikwemhe - 解构:'var [month,day,year] =“12/31/2016”.split(“/”)' – mplungjan

+0

你也错过了2016年的部分 – mplungjan

2

如果您想验证你的约会原始值,并且您的代码,以支持不同的文化,使用时刻JS。

https://momentjs.com

你举的例子:

function dateChanged(rawDate) { 
 
    var mydate = moment(rawDate, 'MM/DD/YY'); 
 
    $('#day').innerHTML = mydate.date(); 
 
    $('#month').innerHTML = mydate.month() + 1; // months are 0 based 
 
    $('#year').innerHTML = mydate.year(); 
 
} 
 
document.addEventListener('DOMContentLoaded', function() { 
 
    var input = $('input'); 
 
    input.value = '12/31/16'; 
 
    dateChanged(input.value); 
 
}); 
 
var $ = document.querySelector.bind(document);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"> 
 
</script> 
 
<input onchange="dateChanged(this.value)" type="text" /> 
 
year <span id="year"></span> 
 
month <span id="month"></span> 
 
day <span id="day"></span>

这是一个时间&日期的js框架,允许解析和格式化日期根据图案&倍&语言环境 这是最好的我知道

+0

我知道moment.js在这里不是一个好的选择:_Deprecation警告:提供的值不是以公认的RFC2822或ISO格式。时刻构造会回落到js Date(),这在所有浏览器和版本中都不可靠。非RFC2822/ISO日期格式不鼓励,将在即将到来的主要版本中删除。 – mplungjan

+0

@shmulikfriedman谢谢,语言环境和模式甚至没有出现在我身上。虽然其他问题在没有图书馆的情况下更直接地回答我的问题,但您给了我一些非常重要的想法。 – Auzy

+0

@mplungjan, 1.在我明确提供了格式之后,它不再被弃用,(同时,提供的日期格式不是我的提问者) 2.如果你控制它,RFC2822或ISO是一个很好的练习格式,但如果原始日期来自用户输入,或者让我们说OCR识别?在那里你必须面对气馁的格式,仍然可以解析日期 –

0

所以我们所有的人(除了Matt.C)都错过了,你可能想把YY强制为YYYY--这是非常糟糕的做法,将一年存储为两位数字。

假设所有日期是从本世纪:

var dateString = "12/31/16"; 
var [month,day,year] = dateString.split("/"); // very new method 
year = "20"+year; // if needed 

以上需要被parseInt'ed成为数字

老越兼容

var dateString = "12/31/16", 
    parts = dateString.split("/"), 
    month = +parts[0], 
    day = +parts[1], 
    year = parseInt("20"+parts[2]); // remove "20"+ if not needed 

注意在此fiddle如何moment.js不喜欢2位数年份

弃用警告:提供的值不是采用公认的RFC2822或ISO格式。时刻构造会回落到js Date(),这在所有浏览器和版本中都不可靠。非RFC2822/ISO日期格式不鼓励,将在即将到来的主要版本中删除。

+0

谢谢,我会牢记这一点。不幸的是,数据是如何输入数据库的。我只需要与它一起工作。 – Auzy

+0

或者让它们更新数据库以包含时间戳,而不是像它应该那样。 – mplungjan

+0

我只是一个合同前端的开发者。但我会把它交给负责人。感谢您的建议。 – Auzy

相关问题