Javascript Cordova WP8 上的日期构造函数
Javascript date constructor on Cordova WP8
我有一个 28-Dec-2016 04:25 AM
格式的日期字符串,需要将其转换为 Date
对象。为此,我首先拆分字符串以获取日期和时间
cDateStringParts = cdate.split(' ');
然后我得到日期和时间组件
cDateParts = cDateStringParts[0].split('-');
cTimeParts = cDateStringParts[1].split(':');
然后我将 Date
对象初始化为
if(cDateStringParts[2]=='AM'){
cDateObject = new Date(cDateParts[2], convertToNumericMonth(cDateParts[1]), cDateParts[0], cTimeParts[0], cTimeParts[1], 0, 0);
} else {
cDateObject = new Date(cDateParts[2], convertToNumericMonth(cDateParts[1]), cDateParts[0], complaintTimeParts[0] + 12, cTimeParts[1], 0, 0);
}
其中 convertToNumericMonth()
是一个将 Jan-Dec 转换为 0-11.But 的函数 我在检查 cDateObject.getDate()/getMonth()/getYear()
时没有得到正确的值。结果是2017/12/29.
我做错了什么?如果我尝试做 alert(cdate,' ',cDateObject.getFullYear()
我得到这个:
This link 可能是您问题的解决方案。
您实际上不能依赖日期解析,因为它取决于时区、夏令时等多种因素。
您还可以检查设备的时区和时间设置,因为浏览器使用系统数据来解析日期。
我在我的浏览器上检查了相同的逻辑,它对我来说工作正常。
这是例子。
如果它以这种方式工作,问题将是 cDateParts 计算的值生成不同的值(可能性非常小)。
希望对您有所帮助。
一个问题是如何将 12 小时制转换为 24 小时制。日期部分是字符串,因此对于“03:45 PM”如下:
complaintTimeParts[0] + 12
将return“0312”。此外,“12:00 AM”应将小时数设置为 0,但您的代码会将小时数设置为 12。
小时可以转换为 24 小时制,方法是先转换为数字,将 12am 转换为 0,如果是 PM,则加 12。如果与其余计算分开进行,也会更简单:
var hr = cTimeParts[0] % 12 + (cDateStringParts[2]=='AM'? 0 : 12);
此处 mod 运算符 %
会将 cTimeParts[0]
转换为数字。现在函数可以是:
function dateParse(cdate) {
var cDateStringParts = cdate.split(' ');
var cDateParts = cDateStringParts[0].split('-');
var cTimeParts = cDateStringParts[1].split(':');
var hr = cTimeParts[0] % 12 + (cDateStringParts[2]=='AM'? 0 : 12);
return new Date(cDateParts[2], convertToNumericMonth(cDateParts[1]),
cDateParts[0], hr, cTimeParts[1]);
}
function convertToNumericMonth(month) {
return {Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,
Aug:7,Sep:8,Oct:9,Nov:10,Dec:11}[month];
}
console.log(dateParse('28-Dec-2016 04:25 AM').toString());
console.log(dateParse('28-Dec-2016 04:25 PM').toString());
最后,缺少的部分设置为 0(或日期为 1),因此不需要包括在内。
我有一个 28-Dec-2016 04:25 AM
格式的日期字符串,需要将其转换为 Date
对象。为此,我首先拆分字符串以获取日期和时间
cDateStringParts = cdate.split(' ');
然后我得到日期和时间组件
cDateParts = cDateStringParts[0].split('-');
cTimeParts = cDateStringParts[1].split(':');
然后我将 Date
对象初始化为
if(cDateStringParts[2]=='AM'){
cDateObject = new Date(cDateParts[2], convertToNumericMonth(cDateParts[1]), cDateParts[0], cTimeParts[0], cTimeParts[1], 0, 0);
} else {
cDateObject = new Date(cDateParts[2], convertToNumericMonth(cDateParts[1]), cDateParts[0], complaintTimeParts[0] + 12, cTimeParts[1], 0, 0);
}
其中 convertToNumericMonth()
是一个将 Jan-Dec 转换为 0-11.But 的函数 我在检查 cDateObject.getDate()/getMonth()/getYear()
时没有得到正确的值。结果是2017/12/29.
我做错了什么?如果我尝试做 alert(cdate,' ',cDateObject.getFullYear()
我得到这个:
This link 可能是您问题的解决方案。
您实际上不能依赖日期解析,因为它取决于时区、夏令时等多种因素。
您还可以检查设备的时区和时间设置,因为浏览器使用系统数据来解析日期。
我在我的浏览器上检查了相同的逻辑,它对我来说工作正常。
这是例子。
如果它以这种方式工作,问题将是 cDateParts 计算的值生成不同的值(可能性非常小)。
希望对您有所帮助。
一个问题是如何将 12 小时制转换为 24 小时制。日期部分是字符串,因此对于“03:45 PM”如下:
complaintTimeParts[0] + 12
将return“0312”。此外,“12:00 AM”应将小时数设置为 0,但您的代码会将小时数设置为 12。
小时可以转换为 24 小时制,方法是先转换为数字,将 12am 转换为 0,如果是 PM,则加 12。如果与其余计算分开进行,也会更简单:
var hr = cTimeParts[0] % 12 + (cDateStringParts[2]=='AM'? 0 : 12);
此处 mod 运算符 %
会将 cTimeParts[0]
转换为数字。现在函数可以是:
function dateParse(cdate) {
var cDateStringParts = cdate.split(' ');
var cDateParts = cDateStringParts[0].split('-');
var cTimeParts = cDateStringParts[1].split(':');
var hr = cTimeParts[0] % 12 + (cDateStringParts[2]=='AM'? 0 : 12);
return new Date(cDateParts[2], convertToNumericMonth(cDateParts[1]),
cDateParts[0], hr, cTimeParts[1]);
}
function convertToNumericMonth(month) {
return {Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,
Aug:7,Sep:8,Oct:9,Nov:10,Dec:11}[month];
}
console.log(dateParse('28-Dec-2016 04:25 AM').toString());
console.log(dateParse('28-Dec-2016 04:25 PM').toString());
最后,缺少的部分设置为 0(或日期为 1),因此不需要包括在内。