2017-06-29 53 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

相關問題