Javascript добавить ведущие нули на сегодняшний день
Я создал этот скрипт для расчета даты на 10 дней вперед в формате ДД / ММ / гггг:
var MyDate = new Date();
var MyDateString = new Date();
MyDate.setDate(MyDate.getDate()+10);
MyDateString = MyDate.getDate() + '/' + (MyDate.getMonth()+1) + '/' + MyDate.getFullYear();
мне нужно, чтобы дата появилась с ведущими нулями в компоненте дня и месяца, добавив эти правила в скрипт. Я не могу заставить его работать.
if (MyDate.getMonth < 10)getMonth = '0' + getMonth;
и
if (MyDate.getDate <10)get.Date = '0' + getDate;
Если бы кто-нибудь мог показать мне, где вставить их в сценарий, я был бы очень признателен.
16 ответов:
попробуйте это:http://jsfiddle.net/xA5B7/
var MyDate = new Date(); var MyDateString; MyDate.setDate(MyDate.getDate() + 20); MyDateString = ('0' + MyDate.getDate()).slice(-2) + '/' + ('0' + (MyDate.getMonth()+1)).slice(-2) + '/' + MyDate.getFullYear();
EDIT:
объяснить,
.slice(-2)дает последние два символа строки.так что, несмотря ни на что, мы можем добавить
"0"в день или месяц, и просто попросите последние два, так как это всегда те два, которые мы хотим.так что если
MyDate.getMonth()возвращает9будет:("0" + "9") // Giving us "09"так что добавление
.slice(-2)на что дает нам последние два символа, который является:("0" + "9").slice(-2) "09"но если
MyDate.getMonth()возвращает10будет:("0" + "10") // Giving us "010"чтобы добавлять
.slice(-2)дает нам последние два символа, или:("0" + "10").slice(-2) "10"
вот пример дата объекта docs в сети разработчиков Mozilla с использованием пользовательской функции "pad", без необходимости расширения прототипа номера Javascript. Удобная функция, которую они дают в качестве примера, -
function pad(n){return n<10 ? '0'+n : n}и ниже он используется в контексте.
/* use a function for the exact format desired... */ function ISODateString(d){ function pad(n){return n<10 ? '0'+n : n} return d.getUTCFullYear()+'-' + pad(d.getUTCMonth()+1)+'-' + pad(d.getUTCDate())+'T' + pad(d.getUTCHours())+':' + pad(d.getUTCMinutes())+':' + pad(d.getUTCSeconds())+'Z' } var d = new Date(); console.log(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z
вы можете определить функцию "str_pad" (как в PHP):
function str_pad(n) { return String("00" + n).slice(-2); }
Number.prototype.padZero= function(len){ var s= String(this), c= '0'; len= len || 2; while(s.length < len) s= c + s; return s; }//при использовании:
(function(){ var myDate= new Date(), myDateString; myDate.setDate(myDate.getDate()+10); myDateString= [myDate.getDate().padZero(), (myDate.getMonth()+1).padZero(), myDate.getFullYear()].join('/'); alert(myDateString); })() /* value: (String) 09/09/2010 */
Если вы хотите локализовать вывод даты по языку и вам нужны ведущие нули, решение выглядит по-другому:
var date = new Date(2018, 2, 1); var result = date.toLocaleDateString("de-DE", { year: "numeric", month: "2-digit", day: "2-digit", }); console.log(result);кроме того, вы можете использовать
2-digitна летний вариант, тоже.пока вы знаете локаль и хотите отобразить дату в удобочитаемой форме, я считаю, что это самый чистый способ выполнить эту работу.
к сожалению, IE10 и более ранние версии не поддерживают toLocaleDateString параметры.
var MyDate = new Date(); var MyDateString = ''; MyDate.setDate(MyDate.getDate()); var tempoMonth = (MyDate.getMonth()+1); var tempoDate = (MyDate.getDate()); if (tempoMonth < 10) tempoMonth = '0' + tempoMonth; if (tempoDate < 10) tempoDate = '0' + tempoDate; MyDateString = tempoDate + '/' + tempoMonth + '/' + MyDate.getFullYear();
для вас люди из будущего (ECMAScript 2017 и за его пределами)
решение
"use strict" const today = new Date() const year = today.getFullYear() const month = `${today.getMonth() + 1}`.padStart(2, 0) const day = `${today.getDate()}`.padStart(2, 0) const stringDate = [day, month, year].join("/") // 13/12/2017объяснение
the
String.prototype.padStart(targetLength[, padString])добавляет как можно большеpadStringнаString.prototypeцель так, что новая длина объектаtargetLength.пример
"use strict" let month = "9" month = month.padStart(2, 0) // "09" let byte = "00000100" byte = byte.padStart(8, 0) // "00000100"
function formatDate(jsDate){ // add leading zeroes to jsDate when days or months are < 10.. // i.e. // formatDate(new Date("1/3/2013")); // returns // "01/03/2103" //////////////////// return (jsDate.getDate()<10?("0"+jsDate.getDate()):jsDate.getDate()) + "/" + ((jsDate.getMonth()+1)<10?("0"+(jsDate.getMonth()+1)):(jsDate.getMonth()+1)) + "/" + jsDate.getFullYear(); }
вы можете использовать тернарный оператор для форматирования даты как оператор "if".
например:
var MyDate = new Date(); MyDate.setDate(MyDate.getDate()+10); var MyDateString = (MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate()) + '/' + ((d.getMonth()+1) < 10 ? '0' + (d.getMonth()+1) : (d.getMonth()+1)) + '/' + MyDate.getFullYear();Так
(MyDate.getDate() < 10 ? '0' + MyDate.getDate() : MyDate.getDate())было бы похоже на Оператор if, где если getDate() возвращает значение меньше 10, то возвращает '0' + дату, или же возвращает дату, если больше 10 (так как нам не нужно добавлять ведущий 0). То же самое в течение месяца.
изменить: Забыл, что getMonth начинается с 0, поэтому добавил +1 для его учета. Из конечно, вы также можете просто сказать d.getMonth()
я завернул правильный ответ на этот вопрос в функцию, которая может добавить несколько ведущих нулей, но по умолчанию добавляет 1 ноль.
function zeroFill(nr, depth){ depth = (depth === undefined)? 1 : depth; var zero = "0"; for (var i = 0; i < depth; ++i) { zero += "0"; } return (zero + nr).slice(-(depth + 1)); }для работы только с числами и не более 2 цифр, это также подход:
function zeroFill(i) { return (i < 10 ? '0' : '') + i }
сделать вашу жизнь проще и использовать момент.js пример кода:
var beginDateTime = moment() .format('DD-MM-YYYY HH:mm') .toString(); // Now will print 30-06-2015 17:55 console.log(beginDateTime);
Я нашел более короткий способ сделать это:
MyDateString.replace(/(^|\D)(\d)(?!\d)/g, '');добавит ведущие нули ко всем одиноким, одиночным цифрам
следующие цели извлечь конфигурацию, крюк в
Date.protoypeи применить конфигурации.я использовал
Arrayдля хранения кусков времени и когда яpush()thisкакDateобъект, он возвращает мне длину итерации. Когда я закончу, я могу использоватьjoinнаreturnзначение.это, кажется, работает довольно быстро: 0.016 МС
// Date protoype Date.prototype.formatTime = function (options) { var i = 0, time = [], len = time.push(this.getHours(), this.getMinutes(), this.getSeconds()); for (; i < len; i += 1) { var tick = time[i]; time[i] = tick < 10 ? options.pad + tick : tick; } return time.join(options.separator); }; // Setup output var cfg = { fieldClock: "#fieldClock", options: { pad: "0", separator: ":", tick: 1000 } }; // Define functionality function startTime() { var clock = $(cfg.fieldClock), now = new Date().formatTime(cfg.options); clock.val(now); setTimeout(startTime, cfg.options.tick); } // Run once startTime();
что бы я сделал, это создать свой собственный помощник даты, который выглядит так:
var DateHelper = { addDays : function(aDate, numberOfDays) { aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays return aDate; // Return the date }, format : function format(date) { return [ ("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes ("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes date.getFullYear() // Get full year ].join('/'); // Glue the pieces together } } // With this helper, you can now just use one line of readable code to : // --------------------------------------------------------------------- // 1. Get the current date // 2. Add 20 days // 3. Format it // 4. Output it // --------------------------------------------------------------------- document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));(см. Также эта скрипка)
другой вариант, используя встроенную функцию, чтобы сделать заполнение (но в результате довольно длинный код!):
myDateString = myDate.getDate().toLocaleString('en-US', {minimumIntegerDigits: 2}) + '/' + (myDate.getMonth()+1).toLocaleString('en-US', {minimumIntegerDigits: 2}) + '/' + myDate.getFullYear(); // '12/06/2017'и еще, манипулируя строками с регулярными выражениями:
var myDateString = myDate.toISOString().replace(/T.*/, '').replace(/-/g, '/'); // '2017/06/12'но имейте в виду, что один покажет год на start и в конец.
добавить некоторые отступы, чтобы разрешить ведущий ноль-где это необходимо-и конкатенации с помощью разделителя выбора в качестве строки.
Number.prototype.padLeft = function(base,chr){ var len = (String(base || 10).length - String(this).length)+1; return len > 0? new Array(len).join(chr || '0')+this : this; } var d = new Date(my_date); var dformatted = [(d.getMonth()+1).padLeft(), d.getDate().padLeft(), d.getFullYear()].join('/');
Comments