Jak mogę przetłumaczyć ten pseudo kod na działający js [nie martw się, skąd pochodzi data końcowa, z wyjątkiem tego, że jest to poprawna data javascript].
var myEndDateTime = somedate; //somedate is a valid js date
var durationInMinutes = 100; //this can be any number of minutes from 1-7200 (5 days)
//this is the calculation I don't know how to do
var myStartDate = somedate - durationInMuntes;
alert("The event will start on " + myStartDate.toDateString() + " at " + myStartDate.toTimeString());
javascript
brendan
źródło
źródło
.getTime()
. Przykład:var myStartDate = new Date(myEndDateTime.getTime() + durationInMinutes * MS_PER_MINUTE);
var myStartDate = somedate.addMinutes(-durationInMuntes);
zakładam, że któryś to obiekt Datevar d = new Date("2017-10-29 01:50:00"), e = new Date(d.getTime() + 20 * 60000);
spodziewałbyśe
się, że tak się stanie02:10:00
, prawda? Nie.01:10:00
. DST mówi cześć. A potem są sekundy przestępne ...Aby to osiągnąć, możesz również skorzystać z funkcji get and set minutes:
var endDate = somedate; var startdate = new Date(endDate); var durationInMinutes = 20; startdate.setMinutes(endDate.getMinutes() - durationInMinutes);
źródło
setMinutes()
jest wystarczająco inteligentny, aby poprawnie obsługiwać ujemne minuty. Więc jeśli datą rozpoczęcia była 3:05, a chcesz odjąć 30 minut, przechodziłbyś-25
do metody setMinutes (), która jest wystarczająco inteligentna, aby wiedzieć, że3:-25
to jest2:35
. (tj. nie zgłasza wyjątku).setMinutes(...)
uchwytów siłyint
. Jeśli ustawisz1.5 minutes
na a,Date
to tylko ustawi1 minute
i zachowa sekundy takie same jak poprzednio.Wszystko to tylko kleszcze, nie trzeba zapamiętywać metod ...
var aMinuteAgo = new Date( Date.now() - 1000 * 60 );
lub
var aMinuteLess = new Date( someDate.getTime() - 1000 * 60 );
aktualizacja
Po pracy z momentjs muszę powiedzieć, że jest to niesamowita biblioteka, którą powinieneś sprawdzić. Prawdą jest, że znaczniki działają w wielu przypadkach, sprawiając, że kod jest bardzo mały i powinieneś starać się, aby kod był jak najmniejszy ze względu na to, co musisz zrobić. Ale w przypadku wszystkiego, co skomplikowane, użyj momentjs.
źródło
moment.js ma kilka naprawdę wygodnych metod manipulowania obiektami daty
Metoda .subtract pozwala odjąć określoną ilość jednostek czasu od daty, podając kwotę i ciąg jednostki czasu.
var now = new Date(); // Sun Jan 22 2017 17:12:18 GMT+0200 ... var olderDate = moment(now).subtract(3, 'minutes').toDate(); // Sun Jan 22 2017 17:09:18 GMT+0200 ...
źródło
Oto co znalazłem:
//First, start with a particular time var date = new Date(); //Add two hours var dd = date.setHours(date.getHours() + 2); //Go back 3 days var dd = date.setDate(date.getDate() - 3); //One minute ago... var dd = date.setMinutes(date.getMinutes() - 1); //Display the date: var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; var date = new Date(dd); var day = date.getDate(); var monthIndex = date.getMonth(); var year = date.getFullYear(); var displayDate = monthNames[monthIndex] + ' ' + day + ', ' + year; alert('Date is now: ' + displayDate);
Źródła:
http://www.javascriptcookbook.com/article/Perform-date-manipulations-based-on-adding-or-subtracting-time/
https://stackoverflow.com/a/12798270/1873386
źródło
var date=new Date(); //here I am using "-30" to subtract 30 minutes from the current time. var minute=date.setMinutes(date.getMinutes()-30); console.log(minute) //it will print the time and date according to the above condition in Unix-timestamp format.
możesz przekonwertować uniksowy znacznik czasu na konwencjonalny czas, używając na
new Date()
przykładvar extract=new Date(minute) console.log(minute)//this will print the time in the readable format.
źródło
Spróbuj jak poniżej:
var dt = new Date(); dt.setMinutes( dt.getMinutes() - 20 ); console.log('#####',dt);
źródło
Oto, co zrobiłem: zobacz na Codepen
var somedate = 1473888180593; var myStartDate; //var myStartDate = somedate - durationInMuntes; myStartDate = new Date(dateAfterSubtracted('minutes', 100)); alert("The event will start on " + myStartDate.toDateString() + " at " + myStartDate.toTimeString()); function dateAfterSubtracted(range, amount){ var now = new Date(); if(range === 'years'){ return now.setDate(now.getYear() - amount); } if(range === 'months'){ return now.setDate(now.getMonth() - amount); } if(range === 'days'){ return now.setDate(now.getDate() - amount); } if(range === 'hours'){ return now.setDate(now.getHours() - amount); } if(range === 'minutes'){ return now.setDate(now.getMinutes() - amount); } else { return null; } }
źródło
new Date()
, ale ma określoną datę i pyta tylko o odejmowanie minut. Ponadto twój kod nie działa - zwraca znacznik czasu UNIX zamiast obiektu Date.Rozszerz klasę Date za pomocą tej funkcji
// Add (or substract if value is negative) the value, expresed in timeUnit // to the date and return the new date. Date.dateAdd = function(currentDate, value, timeUnit) { timeUnit = timeUnit.toLowerCase(); var multiplyBy = { w:604800000, d:86400000, h:3600000, m:60000, s:1000 }; var updatedDate = new Date(currentDate.getTime() + multiplyBy[timeUnit] * value); return updatedDate; };
Możesz więc dodać lub odjąć liczbę minut, sekund, godzin, dni ... do dowolnej daty.
add_10_minutes_to_current_date = Date.dateAdd( Date(), 10, "m"); subs_1_hour_to_a_date = Date.dateAdd( date_value, -1, "h");
źródło