我决定让用户输入DDMMYYY来过生日。如何从该数据在javascript中创建UNIX时间戳?
另外,一旦我有unix时间戳,我怎么用英文显示它,即2000年1月5日星期一?
我可以在PHP中轻松完成,我只是不知道javascript中的函数。
答案 0 :(得分:1)
对于DDMMYYYY
的输入,这将是棘手的,因为如果用户错过一个数字,或者没有前导单数与前导0
,它将抛出整个计算。出生日期输入的最佳(也是最流行的方式)是3个日期,月份和年份的下拉菜单。这样您就可以轻松地以javascript格式处理日期:
var date = new Date($('year').val(), $('month').val(), $('day').val());
alert(date.toDateString());
从UX角度来看,这样会更好,因为它不允许用户输入无效日期,尤其是对于那些使用不同日期格式的区域设置的用户。
答案 1 :(得分:0)
您可以使用substring来获取Day,Month和Year,然后在javascript中创建一个新的Date对象: var ux = new日期(年,月,日).getMilliseconds / 1000;
答案 2 :(得分:0)
你需要使用一些库,或者自己编写代码,因为JavaScript的内置日期解析和编写例程非常有限。这里使用的格式基本上与系统有关。
我有偏见(作为“Going Global with JavaScript and Globalize.js”的作者),但我仍然建议使用Globalize.js,即使在你真的没有全球化但只使用英文符号的情况下。毕竟,使用日期的英文符号是一种本地化形式。
示例:
<script src=globalize.js></script>
<script>
var birthDateString = "09Feb1952"; // just a test case
var birthDate =
Globalize.parseDate(birthDateString, 'ddMMMyyyy');
if(!birthDate) {
alert('Error in birth date!'); // replace by suitable error handling
}
else {
var unixTimeStamp = Math.round(birthDate.getTime()/1000);
document.write(unixTimeStamp + "<br>");
document.write(Globalize.format(birthDate, 'dddd d MMM yyyy'));
}
</script>
这最终会导致结果“1952年2月9日星期六”,这不是所要求的形式,所以如果你真的想要那个表格,你需要一些添加后缀“th”,“st”的附加逻辑“,”nd“或”rd“。
关于UNIX时间戳与JavaScript Date对象,请参阅问题How do you get a timestamp in JavaScript?
的答案答案 3 :(得分:0)
使用moment.js非常容易。
var birthday = moment("10071986", "DDMMYYYY");
var unix = birthday.unix();
var humanized = birthday.format("dddd Do MMM YYYY");
这是一个有效的jsfiddle。 http://jsfiddle.net/timrwood/rXArM/
答案 4 :(得分:0)
function dateFromStr(input) {
var year, month, day;
year = parseInt(input.substr(4,4));
month = parseInt(input.substr(2,2));
day = parseInt(input.substr(0,2));
return new Date(year, month, day);
}
dateFromStr("03082012");
缺点:有点冗长。 优点:对于像这样简单的事情没有外部依赖。
答案 5 :(得分:-1)