我正在寻找将PHP日期格式(即Y-m-d H:I:s)转换为javascript日期格式(分别为YYYY-mm-dd HH:mm:ss)的简单方法。
我不想转换日期(这个问题已经有答案),我正在寻找工具/函数来转换格式代码(我还不知道,因为它是由应用程序中的用户定义的)。
用户可以用PHP date()定义的不同方式来定义它,即“Y/m/d H:i”或“Y-d-m H-i”,在javascript中显示日期时,我需要使用相同的格式。
您是否知道任何准备好的转换函数来制作它?
<?php
$timeformat_php = "H:i:s"; //just defined by the user
$time_universal = date( $timeformat_php, strtotime( $time_php ) );
echo date($timeformat_php, $time_universal); //print as defined by user
?>
<script>
var timeformatPhp = '<?php echo $timeformat_php ?>';
var timeformatJavascript = functionThatIamLookingFor (timeformatPhp);
alert(moment($time_universal).format(timeformatJavascript); //printed again the way user defined
</script>
任何帮助都将不胜感激。谢谢
如果您要求的是使用PHP格式化标记来格式化ECMAScript日期对象,那么下面的内容可能会有所帮助。它支持除时区名称以外的所有标记。我不认为仅仅在浏览器中使用javascript就可以可靠地做到这一点,尽管有点像node。js可能能够。
有几个功能可以使用,例如是否遵守夏令时和生成RFC 2822格式字符串,但我认为它们很容易添加。它支持带引号的字符,因此您可以构建以下字符串:
P.format(date, 'jS \\o\\f F, Y') // 1st of August, 2019
任何与标记不匹配的字符都会复制到输出字符串(例如上面的空格和逗号)。
// Parser and formatter using PHP tokens
let P = function(global) {
let P = {lang: 'en-GB'};
// Format tokens and functions
let tokens = {
// DAY
// day of month, pad to 2 digits
d: d => pad(d.getDate()),
// Day name, first 3 letters
D: d => getDayName(d).substr(0,3),
// day of month, no padding
j: d => d.getDate(),
// Full day name
l: d => getDayName(d),
// ISO weekday number (1 = Monday ... 7 = Sunday)
N: d => d.getDay() || 7,
// Ordinal suffix for day of the month
S: d => getOrdinal(d.getDate()),
// Weekday number (0 = Sunday, 6 = Saturday)
w: d => d.getDay(),
// Day of year, 1 Jan is 0
z: d => {
let Y = d.getFullYear(),
M = d.getMonth(),
D = d.getDate();
return Math.floor((Date.UTC(Y, M, D) - Date.UTC(Y, 0, 1)) / 8.64e7) ;
},
// ISO week number of year
W: d => getWeekNumber(d)[1],
// Full month name
F: d => getMonthName(d),
// Month number, padded
m: d => pad(d.getMonth() + 1),
// 3 letter month name
M: d => getMonthName(d).substr(0, 3),
// Month number, no pading
n: d => d.getMonth() + 1,
// Days in month
t: d => new Date(d.getFullYear(), d.getMonth() + 1, 0).getDate(),
// Return 1 if d is a leap year, otherwise 0
L: d => new Date(d.getFullYear(), 1, 29).getDate() == 29? 1 : 0,
// ISO week numbering year
o: d => getWeekNumber(d)[0],
// 4 digit year
Y: d => {
let year = d.getFullYear();
if (year < 0) {
year = '-' + ('000' + Math.abs(year)).slice(-4);
}
return year;
},
// 2 digit year
y: d => {
let year = d.getFullYear();
if (year >= 0) {
return ('0' + year).slice(-2);
} else {
year = Math.abs(year);
return - + ('0' + year).slice(-2);
}
},
// Lowercase am or pm
a: d => d.getHours() < 12? 'am' : 'pm',
// Uppercase AM or PM
A: d => d.getHours() < 12? 'AM' : 'PM',
// Swatch internet time
B: d => (((+d + 3.6e6) % 8.64e7) / 8.64e4).toFixed(0),
// 12 hour hour no padding
g: d => (d.getHours() % 12) || 12,
// 24 hour hour no padding
G: d => d.getHours(),
// 12 hour hour padded
h: d => pad((d.getHours() % 12) || 12),
// 24 hour hour padded
H: d => pad(d.getHours()),
// Minutes padded
i: d => pad(d.getMinutes()),
// Seconds padded
s: d => pad(d.getSeconds()),
// Microseconds padded - always returns 000000
u: d => '000000',
// Milliseconds
v: d => padd(d.getMilliseconds()),
// Timezone identifier: UTC, GMT or IANA Tz database identifier - Not supported
e: d => void 0,
// If in daylight saving: 1 yes, 0 no
I: d => d.getTimezoneOffset() == getOffsets(d)[0]? 0 : 1,
// Difference to GMT in hours, e.g. +0200
O: d => minsToHours(-d.getTimezoneOffset(), false),
// Difference to GMT in hours with colon, e.g. +02:00
P: d => minsToHours(-d.getTimezoneOffset(), true),
// Timezone abbreviation, e.g. AEST. Dodgy but may work…
T: d => d.toLocaleString('en',{year:'numeric',timeZoneName:'long'}).replace(/[^A-Z]/g, ''),
// Timezone offset in seconds, +ve east
Z: d => d.getTimezoneOffset() * -60,
// ISO 8601 format - UTC
// c: d => d.getUTCFullYear() + '-' + pad(d.getUTCMonth() + 1) + '-' + pad(d.getUTCDate()) +
// 'T' + pad(d.getUTCHours()) + ':' + pad(d.getUTCMinutes()) + ':' + pad(d.getUTCSeconds()) +
// '+00:00',
// ISO 8601 format - local
c: d => P.format(d, 'Y-m-d\\TH:i:sP'),
// RFC 2822 formatted date, local timezone
r: d => P.format(d, 'D, d M Y H:i:s O'),
// Seconds since UNIX epoch (same as ECMAScript epoch)
U: d => d.getTime() / 1000 | 0
};
// Helpers
// Return day name for date
let getDayName = d => d.toLocaleString(P.lang, {weekday:'long'});
// Return month name for date
let getMonthName = d => d.toLocaleString(P.lang, {month:'long'});
// Return [std offest, DST offset]. If no DST, same offset for both
let getOffsets = d => {
let y = d.getFullYear();
let offsets = [0, 2, 5, 9].map(m => new Date(y, m).getTimezoneOffset());
return [Math.max(...offsets), Math.min(...offsets)];
}
// Return ordinal for positive integer
let getOrdinal = n => {
n = n % 100;
let ords = ['th','st','nd','rd'];
return (n < 10 || n > 13) ? ords[n%10] || 'th' : 'th';
};
// Return ISO week number and year
let getWeekNumber = d => {
let e = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
e.setUTCDate(e.getUTCDate() + 4 - (e.getUTCDay()||7));
var yearStart = new Date(Date.UTC(e.getUTCFullYear(),0,1));
var weekNo = Math.ceil(( ( (e - yearStart) / 86400000) + 1)/7);
return [e.getUTCFullYear(), weekNo];
};
// Return true if o is a Date, otherwise false
let isDate = o => Object.prototype.toString.call(o) == '[object Date]';
// Convert numeric minutes to +/-HHMM or +/-HH:MM
let minsToHours = (mins, colon) => {
let sign = mins < 0? '-' : '+';
mins = Math.abs(mins);
let H = pad(mins / 60 | 0);
let M = pad(mins % 60);
return sign + H + (colon? ':' : '') + M;
};
// Pad single digits with a leading zero
let pad = n => (n < 10? '0' : '') + n;
// Pad single digits with two leading zeros, double digits with one leading zero
let padd = n => (n < 10? '00' : n < 100? '0' : '') + n;
// To be completed...
let parse = s => 'not complete';
P.parse = parse;
// Format date using token string s
function format(date, s) {
// Minimal input validation
if (!isDate(date) || typeof s != 'string') {
return; // undefined
}
return s.split('').reduce((acc, c, i, chars) => {
// Add quoted characters to output
if (c == '\\') {
acc += chars.splice(i+1, 1);
// If character matches a token, use it
} else if (c in tokens) {
acc += tokens[c](date);
// Otherwise, just add character to output
} else {
acc += c;
}
return acc;
}, '');
}
P.format = format;
return P;
}(this);
// Examples
console.log('Today is ' + P.format(new Date(), 'l, jS \\o\\f F, Y'));
let startPWars = new Date(-431,3,25);
let endPWars = new Date(-404,0);
console.log('The Peloponnesian Wars started on ' +
P.format(startPWars, 'd F, Y') +
' and ended in ' +
P.format(endPWars, 'Y'));
function showDate() {
let format = document.getElementById('i0').value;
document.getElementById('sp0').textContent = P.format(new Date(), format) || 'invalid tokens';
}
<input id="i0" placeholder="PHP format, e.g. d-M-Y">
<button onclick="showDate()">Show formatted date</button>
<br>
<span id="sp0"></span>
问题内容: 我正在寻找一种简单的方法来将PHP日期格式(即Ymd H:i:s)转换为javascript日期格式(分别为YYYY-mm-dd HH:mm:ss)。 我不想转换日期 (这个问题已经有答案),我正在寻找工具/函数来 转换格式代码(我尚不知道,因为它是由用户在应用程序中定义的) 。 用户可以通过PHP date()即“ Y / m / d H:i”或“ YdmHi”定义的不同方式来定义它
问题内容: 我有一个输出数据数组的PHP脚本。然后将其转换为使用函数。 我的问题是我的数组中有一个日期,但日期格式不正确。 我怎样才能在PHP中转换它呢? 代替上面的日期,我需要等效的JavaScript函数 新的Date() 当我输出上述内容时,我得到以下内容:“ Fri Jun 01 2012 11:08:48 GMT + 0100(GMT Daylight Time)”但是,如果我将PHP日
问题内容: 我正在使用需要json日期格式的API。 我需要转换我的JavaScript日期 1970年1月17日星期六格林尼治标准时间+0100(浪漫标准时间) 以json日期格式 /日期(1405699200)/ 问题答案: 列各项可以吗?
问题内容: 我想将我的PHP服务器时间传递给我的JavaScript文件。 PHP代码: JavaScript: PHP代码返回2012年3月18日星期日12:01:23 +0800,这是澳大利亚/珀斯的正确时间。但这会返回无效的JavaScript日期对象。 当我尝试将其转换为时间戳时: 我得到了JavaScript日期2012年3月18日,星期日04:03:14 GMT + 0000(WET)
问题内容: 我在使用此代码的php中有一个日期字段: 我如何将其转换为MySql格式的Registry,以便包含在db中。它是否遵循以下格式:date(’Ymd’strtotime($ date);.我问的原因是因为我尝试了此方法的变体,但似乎无法正常工作。显示为1970还是其他变体对此非常感谢 问题答案: 1.如果您的MySQL列为: 2.如果您的MySQL列为: 您无需工作,因为它不适用于破折
问题内容: 有没有一种简单的方法可以将一种日期格式转换为PHP中的另一种日期格式? 我有这个: 但是我当然希望它返回一个当前日期,而不是返回“黎明”。我究竟做错了什么? 问题答案: 第二个参数必须是正确的时间戳(自1970年1月1日以来的秒数)。您正在传递一个字符串,date()无法识别。 您可以使用 strtotime() 将日期字符串转换为时间戳。但是,即使strtotime()也无法识别格式