[英]Converting a string into a formatted date
I have written JavaScript code that reads text fields named leave_start
and leave_end
and determines the dates that fall between them. 我已经编写了JavaScript代码,该代码读取名为
leave_start
和leave_end
文本字段,并确定它们之间的日期。 Currently, the dates I am creating look like this: 目前,我创建的日期如下所示:
Mon Apr 6 2015 00:00:00 GMT-0400
However, I want each date to instead look like this: 但是,我希望每个日期看起来像这样:
Mon Apr 6 2015
As you can see, I simply want to strip off the time component. 如您所见,我只是想剥离时间部分。 Can anyone help?
有人可以帮忙吗?
Framework: Ruby on rails 4.1.8 框架: Ruby on Rails 4.1.8
This is my app.js that looks at my two datepicker
text fields ( leave_start
and leave_end
). 这是我的app.js看起来在我的两个
datepicker
的文本字段( leave_start
和leave_end
)。
$(document).ready(function () {
$('.customSub').click(function () {
var start = $('#leave_start').datepicker("getDate"),
end = $('#leave_end').datepicker("getDate"),
currentDate = new Date(start),
between = [];
while (currentDate <= end) {
between.push(new Date(currentDate));
currentDate.setDate(currentDate.getDate() + 1);
}
var formated_dates = between.reduce(function (dates, date) {
dates.push(date.toString());
return dates;
}, []);
$('#gdates').val(formated_dates.join("\n"));
});
});
Based off the answer by @Nikos M., would this be the correct way of doing it? 根据@Nikos M.的回答,这是否是正确的方法?
$(document).ready(function() {
$('.customSub').click(function() {
var start = $('#leave_start').datepicker("getDate"),
end = $('#leave_end').datepicker("getDate"),
currentDate = new Date(start),
between = []
;
while (currentDate <= end) {
between.push(new Date(currentDate));
currentDate.setDate(currentDate.getDate() + 1);
}
var date_start = new Date();
console.log(date('Y-m-d', date_start));
var formated_dates = between.reduce(function(dates, date){
dates.push(date.toString());
return dates;
}, []);
$('#gdates').val(formated_dates.join("\n"));
});
});
Additional information 附加信息
This is my index view where I would like full_range
to look like Mon Apr 6 2015
instead of Mon Apr 6 2015 00:00:00 GMT-0400
. 这是我的索引视图,我希望
full_range
看起来像Mon Apr 6 2015
而不是Mon Apr 6 2015 00:00:00 GMT-0400
。 I tried using .strftime('%m/%d/%y')
on full_range
but it didn't work. 我试着用
.strftime('%m/%d/%y')
上full_range
,但没有奏效。 full_range
is #gdates
in my JavaScript. full_range
在我的JavaScript中是#gdates
。
%table.table.table-bordered.trace-table
%tr
-@entry.each do |e|
%tr
%td.trace-table.bordered.trace-table{:style => 'width:8%;'}= e.leave_start.strftime('%m/%d/%y')
%td.trace-table.bordered.trace-table{:style => 'width:8%;'}= e.leave_end.strftime('%m/%d/%y')
%td.trace-table.bordered.trace-table{:style => 'width:8%;'}= e.full_range
Finally, this is my entry table: 最后,这是我的输入表:
create_table "entries"
t.datetime "created_at"
t.datetime "updated_at"
t.datetime "leave_start"
t.datetime "leave_end"
t.string "full_range"
to_date() public Converts a string to a Date value. to_date()public将字符串转换为Date值。
> "1-1-2012".to_date # => Sun, 01 Jan 2012
> "01/01/2012".to_date # => Sun, 01 Jan 2012
> "2012-12-13".to_date # => Thu, 13 Dec 2012
Source : http://apidock.com/rails/String/to_date 资料来源: http : //apidock.com/rails/String/to_date
There are varioius libraries around for manipulating dates in various formats like moment.js etc 周围有varioius库,用于处理各种格式的日期,例如moment.js等。
What you need here is a function to convert the date into a given format. 您需要的是一个将日期转换成给定格式的函数。 Javascript already has a limited such feature by using
date.toString
or date.toDate
通过使用
date.toString
或date.toDate
Javascript已经具有有限的此类功能
PHP has a function to format date which has been ported to javascript on php.js project (on github) you can literaly use that function in your project (simply copy-paste it as it is standalone) PHP具有格式化日期的功能,该功能已移植到php.js项目(在github上)上的javascript中,您可以在项目中直接使用该功能(只需复制粘贴即可,因为它是独立的)
You can literaly format the date as you need including time, year etc.. (it is not limited as the js native date methods) 您可以根据需要格式化日期格式,包括时间,年份等。(不限于js本机日期方法)
reproducing code here (taken from php.js): 在此处复制代码(取自php.js):
function date(format, timestamp) {
// discuss at: http://phpjs.org/functions/date/
// original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
// original by: gettimeofday
// parts by: Peter-Paul Koch (http://www.quirksmode.org/js/beat.html)
// improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// improved by: MeEtc (http://yass.meetcweb.com)
// improved by: Brad Touesnard
// improved by: Tim Wiel
// improved by: Bryan Elliott
// improved by: David Randall
// improved by: Theriault
// improved by: Theriault
// improved by: Brett Zamir (http://brett-zamir.me)
// improved by: Theriault
// improved by: Thomas Beaucourt (http://www.webapp.fr)
// improved by: JT
// improved by: Theriault
// improved by: Rafał Kukawski (http://blog.kukawski.pl)
// improved by: Theriault
// input by: Brett Zamir (http://brett-zamir.me)
// input by: majak
// input by: Alex
// input by: Martin
// input by: Alex Wilson
// input by: Haravikk
// bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// bugfixed by: majak
// bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// bugfixed by: Brett Zamir (http://brett-zamir.me)
// bugfixed by: omid (http://phpjs.org/functions/380:380#comment_137122)
// bugfixed by: Chris (http://www.devotis.nl/)
// note: Uses global: php_js to store the default timezone
// note: Although the function potentially allows timezone info (see notes), it currently does not set
// note: per a timezone specified by date_default_timezone_set(). Implementers might use
// note: this.php_js.currentTimezoneOffset and this.php_js.currentTimezoneDST set by that function
// note: in order to adjust the dates in this function (or our other date functions!) accordingly
// example 1: date('H:m:s \\m \\i\\s \\m\\o\\n\\t\\h', 1062402400);
// returns 1: '09:09:40 m is month'
// example 2: date('F j, Y, g:i a', 1062462400);
// returns 2: 'September 2, 2003, 2:26 am'
// example 3: date('Y W o', 1062462400);
// returns 3: '2003 36 2003'
// example 4: x = date('Y m d', (new Date()).getTime()/1000);
// example 4: (x+'').length == 10 // 2009 01 09
// returns 4: true
// example 5: date('W', 1104534000);
// returns 5: '53'
// example 6: date('B t', 1104534000);
// returns 6: '999 31'
// example 7: date('W U', 1293750000.82); // 2010-12-31
// returns 7: '52 1293750000'
// example 8: date('W', 1293836400); // 2011-01-01
// returns 8: '52'
// example 9: date('W Y-m-d', 1293974054); // 2011-01-02
// returns 9: '52 2011-01-02'
var that = this;
var jsdate, f;
// Keep this here (works, but for code commented-out below for file size reasons)
// var tal= [];
var txt_words = [
'Sun', 'Mon', 'Tues', 'Wednes', 'Thurs', 'Fri', 'Satur',
'January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'
];
// trailing backslash -> (dropped)
// a backslash followed by any character (including backslash) -> the character
// empty string -> empty string
var formatChr = /\\?(.?)/gi;
var formatChrCb = function (t, s) {
return f[t] ? f[t]() : s;
};
var _pad = function (n, c) {
n = String(n);
while (n.length < c) {
n = '0' + n;
}
return n;
};
f = {
// Day
d: function () {
// Day of month w/leading 0; 01..31
return _pad(f.j(), 2);
},
D: function () {
// Shorthand day name; Mon...Sun
return f.l()
.slice(0, 3);
},
j: function () {
// Day of month; 1..31
return jsdate.getDate();
},
l: function () {
// Full day name; Monday...Sunday
return txt_words[f.w()] + 'day';
},
N: function () {
// ISO-8601 day of week; 1[Mon]..7[Sun]
return f.w() || 7;
},
S: function () {
// Ordinal suffix for day of month; st, nd, rd, th
var j = f.j();
var i = j % 10;
if (i <= 3 && parseInt((j % 100) / 10, 10) == 1) {
i = 0;
}
return ['st', 'nd', 'rd'][i - 1] || 'th';
},
w: function () {
// Day of week; 0[Sun]..6[Sat]
return jsdate.getDay();
},
z: function () {
// Day of year; 0..365
var a = new Date(f.Y(), f.n() - 1, f.j());
var b = new Date(f.Y(), 0, 1);
return Math.round((a - b) / 864e5);
},
// Week
W: function () {
// ISO-8601 week number
var a = new Date(f.Y(), f.n() - 1, f.j() - f.N() + 3);
var b = new Date(a.getFullYear(), 0, 4);
return _pad(1 + Math.round((a - b) / 864e5 / 7), 2);
},
// Month
F: function () {
// Full month name; January...December
return txt_words[6 + f.n()];
},
m: function () {
// Month w/leading 0; 01...12
return _pad(f.n(), 2);
},
M: function () {
// Shorthand month name; Jan...Dec
return f.F()
.slice(0, 3);
},
n: function () {
// Month; 1...12
return jsdate.getMonth() + 1;
},
t: function () {
// Days in month; 28...31
return (new Date(f.Y(), f.n(), 0))
.getDate();
},
// Year
L: function () {
// Is leap year?; 0 or 1
var j = f.Y();
return j % 4 === 0 & j % 100 !== 0 | j % 400 === 0;
},
o: function () {
// ISO-8601 year
var n = f.n();
var W = f.W();
var Y = f.Y();
return Y + (n === 12 && W < 9 ? 1 : n === 1 && W > 9 ? -1 : 0);
},
Y: function () {
// Full year; e.g. 1980...2010
return jsdate.getFullYear();
},
y: function () {
// Last two digits of year; 00...99
return f.Y()
.toString()
.slice(-2);
},
// Time
a: function () {
// am or pm
return jsdate.getHours() > 11 ? 'pm' : 'am';
},
A: function () {
// AM or PM
return f.a()
.toUpperCase();
},
B: function () {
// Swatch Internet time; 000..999
var H = jsdate.getUTCHours() * 36e2;
// Hours
var i = jsdate.getUTCMinutes() * 60;
// Minutes
// Seconds
var s = jsdate.getUTCSeconds();
return _pad(Math.floor((H + i + s + 36e2) / 86.4) % 1e3, 3);
},
g: function () {
// 12-Hours; 1..12
return f.G() % 12 || 12;
},
G: function () {
// 24-Hours; 0..23
return jsdate.getHours();
},
h: function () {
// 12-Hours w/leading 0; 01..12
return _pad(f.g(), 2);
},
H: function () {
// 24-Hours w/leading 0; 00..23
return _pad(f.G(), 2);
},
i: function () {
// Minutes w/leading 0; 00..59
return _pad(jsdate.getMinutes(), 2);
},
s: function () {
// Seconds w/leading 0; 00..59
return _pad(jsdate.getSeconds(), 2);
},
u: function () {
// Microseconds; 000000-999000
return _pad(jsdate.getMilliseconds() * 1000, 6);
},
// Timezone
e: function () {
// Timezone identifier; e.g. Atlantic/Azores, ...
// The following works, but requires inclusion of the very large
// timezone_abbreviations_list() function.
/* return that.date_default_timezone_get();
*/
throw 'Not supported (see source code of date() for timezone on how to add support)';
},
I: function () {
// DST observed?; 0 or 1
// Compares Jan 1 minus Jan 1 UTC to Jul 1 minus Jul 1 UTC.
// If they are not equal, then DST is observed.
var a = new Date(f.Y(), 0);
// Jan 1
var c = Date.UTC(f.Y(), 0);
// Jan 1 UTC
var b = new Date(f.Y(), 6);
// Jul 1
// Jul 1 UTC
var d = Date.UTC(f.Y(), 6);
return ((a - c) !== (b - d)) ? 1 : 0;
},
O: function () {
// Difference to GMT in hour format; e.g. +0200
var tzo = jsdate.getTimezoneOffset();
var a = Math.abs(tzo);
return (tzo > 0 ? '-' : '+') + _pad(Math.floor(a / 60) * 100 + a % 60, 4);
},
P: function () {
// Difference to GMT w/colon; e.g. +02:00
var O = f.O();
return (O.substr(0, 3) + ':' + O.substr(3, 2));
},
T: function () {
// Timezone abbreviation; e.g. EST, MDT, ...
// The following works, but requires inclusion of the very
// large timezone_abbreviations_list() function.
/* var abbr, i, os, _default;
if (!tal.length) {
tal = that.timezone_abbreviations_list();
}
if (that.php_js && that.php_js.default_timezone) {
_default = that.php_js.default_timezone;
for (abbr in tal) {
for (i = 0; i < tal[abbr].length; i++) {
if (tal[abbr][i].timezone_id === _default) {
return abbr.toUpperCase();
}
}
}
}
for (abbr in tal) {
for (i = 0; i < tal[abbr].length; i++) {
os = -jsdate.getTimezoneOffset() * 60;
if (tal[abbr][i].offset === os) {
return abbr.toUpperCase();
}
}
}
*/
return 'UTC';
},
Z: function () {
// Timezone offset in seconds (-43200...50400)
return -jsdate.getTimezoneOffset() * 60;
},
// Full Date/Time
c: function () {
// ISO-8601 date.
return 'Y-m-d\\TH:i:sP'.replace(formatChr, formatChrCb);
},
r: function () {
// RFC 2822
return 'D, d M Y H:i:s O'.replace(formatChr, formatChrCb);
},
U: function () {
// Seconds since UNIX epoch
return jsdate / 1000 | 0;
}
};
this.date = function (format, timestamp) {
that = this;
jsdate = (timestamp === undefined ? new Date() : // Not provided
(timestamp instanceof Date) ? new Date(timestamp) : // JS Date()
new Date(timestamp * 1000) // UNIX timestamp (auto-convert to int)
);
return format.replace(formatChr, formatChrCb);
};
return this.date(format, timestamp);
}
use as such: 这样使用:
var date_start = new Date();
/* use any format you like here */
console.log(date('Y-m-d', Math.floor(date_start.getTime() / 1000)));
// or even this
console.log(date('Y-m-d', date_start));
output: 输出:
2015-05-08
d = new Date will return << Wed Apr 08 2015 18:45:45 GMT+0530 (IST) d =新日期将返回<< 2015年4月8日星期三18:45:45 GMT + 0530(IST)
d.toDateString will return << "Wed Apr 08 2015" d.toDateString将返回<<“ 2015年4月8日”
try this in rails c 在rails c中尝试一下
d = DateTime.now d = DateTime.now
d.to_date d.to_date
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.