จะได้รับ 30 วันก่อนวันที่ปัจจุบัน?


100

ฉันมีช่องป้อนปฏิทินเริ่มต้นและช่องป้อนปฏิทินสิ้นสุด เราต้องการให้ค่าเริ่มต้นเริ่มต้นช่องใส่ปฏิทินก่อนวันที่ปัจจุบัน 30 วันและช่องป้อนปฏิทินสิ้นสุดเป็นวันที่ปัจจุบัน นี่คือวันที่ของฉัน

var today = new Date(),
    dd    = today.getDate(),
    mm    = today.getMonth(),
    yyyy  = today.getFullYear(),
    month = ["January", "February", "March",
        "April", "May", "June", "July", "August",
        "September", "October" "November", "December"],
    startdate = month[mm] + ", " + yyyy.toString();

วันที่สิ้นสุดจะเป็นเช่นvar enddate = startdate - 30;นี้แน่นอนว่าจะใช้ไม่ได้

ดังนั้นหากวันที่ปัจจุบันคือ 30 ธันวาคม 2011 ฉันต้องการให้วันที่เริ่มต้นอ่าน 1 ธันวาคม 2011

แก้ไข: คำถามของฉันได้รับคำตอบ ... เรียงลำดับ Date.today();และDate.today().add(-30);ทำงานได้ แต่ฉันต้องการวันที่ในรูปแบบของJanuary 13, 2012. Fri Jan 13 2012 10:48:56 GMT -055 (EST)ไม่ ความช่วยเหลือใด ๆ

แก้ไขเพิ่มเติม: ในขณะที่เขียนนี้คือปี 2018 เพียงใช้Moment.js Moment.jsมันคือที่สุด.


stackoverflow.com/questions/563406/…ฉันคิดว่าอาจช่วยได้
Tim Withers

คำตอบ:


154

ลองใช้ไลบรารีวันที่ Datejs JavaScript ที่ยอดเยี่ยม(ต้นฉบับไม่ได้รับการบำรุงรักษาอีกต่อไปดังนั้นคุณอาจสนใจทางแยกที่ได้รับการบำรุงรักษานี้แทน):

Date.today().add(-30).days(); // or...
Date.today().add({days:-30});

[แก้ไข]

ดูไลบรารีวันที่ JavaScript Moment.js ที่ยอดเยี่ยม:

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');

3
ฉันกำลังดิ้นรนเพื่อให้ได้วันที่เริ่มต้นและสิ้นสุด 30 วันก่อนและหลังวันนี้ใน UTC โดยไม่มีเวลา สิ่งนี้ได้ผล:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
Dylan Valade

3
ฉันใช้moment()วิธีการนี้และต่อท้ายtoDate()วิธีการเพื่อเรียกคืนวัตถุวันที่ JavaScript ขอบคุณ!
Brylie Christopher Oxley

6
ทำไมคุณต้องใช้ไลบรารีเพื่อสิ่งนี้? ดูเหมือนจะบ้า
แฮร์รี่

1
คุณสามารถแนะนำไลบรารีสำหรับ console.log ได้ไหม
Andre Elrico

160

ลองทำตามนี้

var today = new Date()
var priorDate = new Date().setDate(today.getDate()-30)

ตามที่ระบุไว้โดย @Neel วิธีนี้จะส่งคืนในรูปแบบการประทับเวลาของ Javascript ในการแปลงกลับเป็นออบเจ็กต์วันที่คุณต้องส่งต่อด้านบนไปยังออบเจ็กต์ Date ใหม่ new Date(priorDate).


17
โดยไม่ต้องใช้ไลบรารีภายนอกฉันชอบวิธีนี้มากที่สุด ขอบคุณ.
Gowiem

17
โปรดทราบว่าวิธีนี้จะส่งคืนในรูปแบบการประทับเวลา Javascript ในการแปลงกลับเป็นออบเจ็กต์วันที่คุณต้องส่งข้อมูลข้างต้นไปที่new Date(priorDate)
Neel

1
บางครั้งคุณก็ต้องการวานิลลา js โดยไม่มีห้องสมุด! ขอบคุณ :)
Andrew McOlash

ฉันได้รับ setDate () ไม่ใช่ฟังก์ชัน
chovy

1
@chovy วิธีเดียวที่ฉันสามารถจินตนาการได้ว่าคุณได้รับข้อผิดพลาดนั้นเป็นเพราะคุณไม่ได้เรียกsetDate()ใช้Dateวัตถุ เป็นไปไม่ได้ที่จะวินิจฉัยโดยไม่เห็นรหัสของคุณ
Rory McCrossan

91

นี่เป็นวิธีแก้ปัญหาที่น่าเกลียดสำหรับคุณ:

var date = new Date(new Date().setDate(new Date().getDate() - 30));

25
เฮฮานี่คือทางออกที่ดีที่สุด
Mark Rogers

8
ตกลง - นี่คือทางออกที่ดีที่สุด นี่คือว่าการแก้ปัญหาของคำตอบ Rory McCrossan ของ - แต่กระชับและสมบูรณ์ (ไม่มีห้องสมุดภายนอกที่จำเป็น)
Dan Nissenbaum

7
@MarkRogers "แหะๆ" คือคำที่ใช่ วันที่ของ JavaScript นั้นไร้สาระอย่างแท้จริง
JosephStyons

ใช่นี่เป็นทางออกที่ง่ายและดีที่สุด
Sachini Witharana

40
startDate = new Date(today.getTime() - 30*24*60*60*1000);

.getTime()วิธีการส่งกลับมาตรฐาน JS ประทับเวลา (มิลลิวินาทีตั้งแต่ ม.ค. 1/1970) ซึ่งคุณสามารถใช้ดำเนินการทางคณิตศาสตร์ปกติซึ่งสามารถป้อนกลับไปยังวัตถุวันโดยตรง


10

รับ 30 วันถัดไปจากวันนี้

let now = new Date()
console.log('Today: ' + now.toUTCString())
let next30days = new Date(now.setDate(now.getDate() + 30))
console.log('Next 30th day: ' + next30days.toUTCString())

รับแบบฟอร์ม 30 วันล่าสุดวันนี้

let now = new Date()
console.log('Today: ' + now.toUTCString())
let last30days = new Date(now.setDate(now.getDate() - 30))
console.log('Last 30th day: ' + last30days.toUTCString())



4

ง่าย.(Using Vanilla JS)

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000);

ISOFormat?

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();


3

รหัสJavascript วานิลลา 1 ซับอย่างง่าย:

const priorByDays = new Date(Date.now() - days * 24 * 60 * 60 * 1000)

ตัวอย่างเช่น days = 7 สมมติว่าเป็นปัจจุบันdate = Fri Sep 18 2020 01:33:26 GMT+0530

ผลลัพธ์จะเป็น: Fri Sep 11 2020 01:34:03 GMT+0530

ความสวยงามของสิ่งนี้คือคุณสามารถปรับแต่งเพื่อให้ได้ผลลัพธ์ในแบบที่ต้องการ

  • การประทับเวลา: Date.now() - days * 24 * 60 * 60 * 1000

  • ISOString: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString()



2

ฉันจะชอบช่วงเวลา js

startDate = moment().subtract(30, 'days').format('LL')  // January 29, 2015

endDate = moment().format('LL'); // February 28, 2015

1

นี่คือเวอร์ชัน ES6

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )

คำตอบนี้แตกต่างจากคำตอบอื่น ๆ เช่นคำตอบนี้อย่างไร นอกจากนี้ยังไม่มีอะไรที่ไม่สามารถทำได้ใน ES5 ... หรือ ES3 ด้วยซ้ำ
ลิงนอกรีต

1

คุณสามารถทำได้โดยใช้โค้ด 1 บรรทัดโดยใช้ช่วงเวลาใน Node JS :)

    let lastOneMonthDate = moment().subtract(30,"days").utc().toISOString()

ไม่ต้องการรูปแบบ UTC EASIER: P

    let lastOneMonthDate = moment().subtract(30,"days").toISOString()

1

หากคุณไม่ชอบโมเมนต์ js คุณสามารถใช้สิ่งนี้:

let x = new Date()

x.toISOString(x.setDate(x.getDate())).slice(0, 10)

โดยทั่วไปจะได้รับวันที่ปัจจุบัน (ค่าตัวเลขของวันที่ของเดือนปัจจุบัน) จากนั้นกำหนดค่า จากนั้นมันจะแปลงเป็นรูปแบบ ISO ซึ่งฉันจะตัดวันที่ที่เป็นตัวเลขบริสุทธิ์ลง

หวังว่ามันจะช่วยใครบางคน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.