簡體   English   中英

來自字符串的特定格式的Javascript日期

[英]Javascript date in specific format from string

如何在不將 Date 對象更改為 String 對象的情況下以 ddmmyyyy 格式獲取 javascript 日期?

  • 我有一個String stringDate = 31/08/2015 (以 dd/mm/yyyy 格式)
  • 我想以相同的格式獲取 javascript 日期對象,即dateObj = 31/08/2015 (其中 dateObj 是 dd/mm/yyyy 格式的 javascript 日期對象)

如何在 javascript 中將“dd/mm/yyyy”形式的字符串轉換為日期對象:

var stringDate = "31/08/2015";

//split the string into array of date components

stringDate = stringDate.split("/");

//stringDate is now ["31", "08", "2015"]

//convert each array string value to a number, using unary plus
//and feed these values into a new date object

var dateObj = new Date(+stringDate[2], +stringDate[1] - 1, +stringDate[0]);

//note that javascript month values are 0 for Jan ... 11 for Dec, need to subtract one from the month value

以及如何從日期對象中獲取“dd/mm/yyyy”形式的字符串:

//a date object representing 31 Aug 2015
var dateObject = new Date(2015, 7, 31);

//get the date, month and year values from the date object
var dmy = [
    dateObject.getDate(),
    dateObject.getMonth() + 1,
    dateObject.getFullYear()    
];

//convert to strings and pad with leading zero, if necessary
dmy[0] = ('0' + dmy[0]).slice(-2);
dmy[1] = ('0' + dmy[1]).slice(-2);
dmy[2] = ('0000' + dmy[2]).slice(-4);

//join values with `/` as delimiter
dmy = dmy.join('/');

//dmy is now the string "31/08/2015"

從您的問題和您對我之前回答的評論來看,您似乎在要求以下內容:

  1. 如何從表單“dd/mm/yyyy”上的字符串創建javascript日期對象,以及
  2. 當您在其他代碼中檢查/使用它們時,如何使這些 Date 對象以“dd/mm/yyyy”形式表示為字符串

第一個任務在我之前的回答中已經解釋過了,讓我們通過制作一個函數來進行轉換來總結:

//create date object from string on the form "dd/mm/yyyy"

function getDateObjectFromString(dmyString){
    return new Date(
        + dmyString.slice(6,10),
        (+ dmyString.slice(3,5)) - 1,
        + dmyString.slice(0,2)
    );
}

測試這個:

var dateString = "31/08/2015";
var dateObject = getDateObjectFromString(dateString);

如果您在控制台中檢查dateObject或在代碼中使用它,它將顯示為一個字符串(與您要求的格式不同),但這是因為 javascript 會自動將 Date 對象轉換為字符串表示(或數字表示),具體取決於在上下文中,通過調用 Date 對象的原生toString()toValue()方法。

您可以方便地查看dateStringdateObject是不同的,而且dateObject確實有一個日期對象的屬性:

console.log(typeof dateString); //returns "string"
console.log(typeof dateObject); //returns "object"

console.log(dateObject.toString()); //returns a browser-dependent and timezone-dependent string
console.log(dateObject.valueOf()); //returns the numeric date representation

第二個任務可以通過讓你的 Date 對象使用自定義.toString()方法來實現:

//custom method to get "dd/mm/yyyy" when called on a Date object
function customDateToString(){
    return [
        ('0' + this.getDate()).slice(-2),
        ('0' + (this.getMonth() + 1)).slice(-2),
        ('0000' + this.getFullYear()).slice(-4)
    ].join("/");
}

我們將避免弄亂Date.prototype ,但是可以在我們創建日期對象時分配這個自定義.toString() ,修改getDateObjectFromString函數:

function getDateObjectFromString(dmyString){
    var dateObject = new Date(
        + dmyString.slice(6,10),
        (+ dmyString.slice(3,5)) - 1,
        + dmyString.slice(0,2)
    );
    dateObject.toString = customDateToString;
    return dateObject;
}

現在測試:

var dateString = "31/08/2015";
var dateObject = getDateObjectFromString(dateString);
console.log(dateObject); //displays "31/08/2015"

console.log(dateObject.getDay()); // displays 1 (for Monday), showing that dateObject indeed has the properties/methods of a Date object

我希望這能回答你的問題。

有一種簡單的方法可以獲得所需的輸出。

表示從“ Mon Sep 07 2020 15:21:31 GMT+0530(印度標准時間) ”到“ 07/09/2020 ”。

假設您通過以下方式獲取日期對象

const d = new date(); // 2020 年 9 月 7 日星期一 15:21:31 GMT+0530

您可以通過附加函數將其轉換為DD-MM-YYYY格式

toLocaleDateString('en-GB') // 07/09/2020

所以完整的代碼

 const d = new Date(); console.log('Original date', d) const newDate = d.toLocaleDateString('en-GB'); console.log('Modified date', newDate)

試試這個:

var d = new Date("31/0/2015");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM